2013-01-09 139 views
0

我需要/想要添加設備設置屏幕關閉超時監聽器以使用用戶在設置設備首選項中選擇的最近時間更新我的交換機。需要android設備設置屏幕關閉超時監聽器

代碼我想:

OnSharedPreferenceChangeListener listener = new OnSharedPreferenceChangeListener() { 

     @Override 
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
      Log.v(TAG, "Pref changes"); 
     } 
    }; 
    SharedPreferences pref = getApplicationContext().getSharedPreferences(Settings.System.SCREEN_OFF_TIMEOUT, 0); 
    pref.registerOnSharedPreferenceChangeListener(listener); 

我試過,但好像監聽器(在我的情況appContext)爲特定的上下文唯一的工作

任何人都可以請幫我解決這個問題?

回答

3

我知道這是一個古老的問題,但由於我最近發現如何做到這一點,我想我會張貼我的答案,以防其他人遇到這個問題。

在下面的例子中, 「背景」 是你的活動或服務...

int displayTimeout; 

ContentObserver settingsContentObserver = new ContentObserver(new Handler()) { 
@Override 
public void onChange(boolean selfChange) { 
    super.onChange(selfChange); 
    try { 
     int checkDisplayTimeout = Settings.System.getInt(context.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT); 
     if (checkDisplayTimeout != displayTimeout) { 
      // the DisplayTimeout has changed 
      displayTimeout = checkDisplayTimeout; 
     } 
    } catch (SettingNotFoundException e) { 
     // The SCREEN_OFF_TIMEOUT setting didn't change 'cause it doesn't exist 
    } 
}}; 

爲了得到它開始收聽,請使用

context.getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, settingsContentObserver); 

通過使用android.provider.Settings.System.CONTENT_URI,這個ContentObserver應響應許多(但不是全部)設置更改。

確保在完成收聽時將其關閉。

context.getContentResolver().unregisterContentObserver(settingsContentObserver); 
+0

是的,做了一段時間,並像這樣工作..Thnx – AJit