Android中系统设置参数改变监听(以时间同步为例)
import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.database.ContentObserver; import android.os.Bundle; import android.os.Handler; import android.provider.Settings; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private static final int ON = 1; private static final int OFF = 0; private Button mbtnGetStatus; private Button mbtnAutoTime; private Button mbtnAutoTimeListen; private TextView mtvInfo; /** * 是否开启时间同步监听 */ private boolean isListening = false; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mtvInfo = (TextView) findViewById(R.id.multiAutoCompleteTextView1); mtvInfo.setText(""); mbtnGetStatus = (Button) findViewById(R.id.button1); mbtnGetStatus.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int nAutoTimeStatus = Settings.System.getInt( getContentResolver(), Settings.System.AUTO_TIME, OFF); OutPrintLog("当前时间同步状态:" + nAutoTimeStatus); } }); mbtnAutoTime = (Button) findViewById(R.id.button2); mbtnAutoTime.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int nAutoTimeStatus = Settings.System.getInt( getContentResolver(), Settings.System.AUTO_TIME, OFF); Settings.System.putInt(getContentResolver(), Settings.System.AUTO_TIME, nAutoTimeStatus == OFF ? ON : OFF); Refresh(); } }); mbtnAutoTimeListen = (Button) findViewById(R.id.button3); mbtnAutoTimeListen.setOnClickListener(new OnClickListener() { private ContentObserver mAutoTimeObserver = new ContentObserver( new Handler()) { @Override public void onChange(boolean selfChange) { Log.i(TAG, "Auto time state changed"); int nAutoTimeStatus = Settings.System.getInt( getContentResolver(), Settings.System.AUTO_TIME, OFF); OutPrintLog("当前时间同步状态:" + nAutoTimeStatus); } }; @Override public void onClick(View v) { // TODO Auto-generated method stub if (!isListening) { getApplication() .getContentResolver() .registerContentObserver( Settings.System .getUriFor(Settings.System.AUTO_TIME), true, mAutoTimeObserver); } else { getApplicationContext().getContentResolver() .unregisterContentObserver(this.mAutoTimeObserver); } isListening = !isListening; Refresh(); } }); Refresh(); } private void Refresh() { int nAutoTimeStatus = Settings.System.getInt(getContentResolver(), Settings.System.AUTO_TIME, OFF); mbtnAutoTime .setText(nAutoTimeStatus == OFF ? R.string.app_autotime_start : R.string.app_autotime_end); mbtnAutoTimeListen .setText(isListening ? R.string.app_autotimelisten_end : R.string.app_autotimelisten_start); } private void OutPrintLog(CharSequence text) { mtvInfo.setText((mtvInfo.getText()).toString() + new SimpleDateFormat("\n mm:ss").format(new Date()) + text.toString()); }