如何在首选项中取消注册内容观察者

时间:2015-03-14 17:10:38

标签: android preferences contentobserver

我正在开发应用程序,我有一个任务来处理首选项,所以实现了 切换首选项,如果开关打开,我必须监视联系人数据库,所以我使用 内容观察者和用户切换时我必须取消注册该内容观察者 看看我实现的代码

MyContentObserver observer;
switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

        @Override
        public boolean onPreferenceChange(Preference preference,
                Object newValue) {
            boolean switched = ((SwitchPreference) preference)
                    .isChecked();

           if( !switched){
            //   Toast.makeText(SettingActivity.this,"Switch is on",Toast.LENGTH_SHORT).show();
           observer=new MyCOntentObserver();
               getContentResolver()
               .registerContentObserver(
                       ContactsContract.Contacts.CONTENT_URI, true,
                       observer); 

           }
               else{
            //   Toast.makeText(SettingActivity.this,"Switch is off",Toast.LENGTH_SHORT).show();

               //   getContentResolver().unregisterContentObserver(observer);
               //here i want a logic that to destroy instance which i created
                 while switch is On


}
               return true;
        }
    });
  public class MyContentObserver extends ContentObserver{
            public MyCOntentObserver() {
                super(null);
            }
            @Override
            public void onChange(boolean selfChange) {
            super.onChange(selfChange);
                Log.e("","~~~~~~contact inserted or updated"+selfChange);
            }  

            @Override
            public boolean deliverSelfNotifications() {
                return true;
            }
        }

任何建议或帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

那就行了。您只需使用相同的观察者调用unregisterContentObserver即可删除通知。但是为了避免错误,如果已经删除了observar,请将其添加到try-catch块中

try {  
getContentResolver().unregisterContentObserver(observer);  
} catch (IllegalStateException ise) {  
// Do Nothing.  Observer has already been unregistered.  
}  

您不需要销毁实例,只需确保它是单例。因此,如果用户再次打开设置,您将回收该实例。