Android中系统设置参数改变监听(以时间同步为例)

 Result:

Source code:

package com.inanwong.main;

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());
	}
}


 

你可能感兴趣的:(Android)