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());
    }
原文地址:https://www.cnblogs.com/gzggyy/p/3072504.html