Android ContenObserver 监听联系人数据变化

仓廪实则知礼节,衣食足则知荣辱。这篇文章主要讲述Android ContenObserver 监听联系人数据变化相关的知识,希望能为你提供帮助。
一、知识介绍    1、ContentProvider是内容提供者
          ContentResolver是内容解决者(对内容提供的数据进行操作)
          ContentObserver是内容观察者(观察内容提供者提供的数据变化)
  2、ContentObserver需要ContentResolver进行注册。
          resolver.registerContentObserver(uri,true,observer);
          ①URI(第一个参数):该监听所监听ContentProvider的Uri
          ②notifyForDescendents(第二个参数):设置为true。(如果请求的uri为content://abc则uri为content://abc/xyz数据改变都将会检测到。
          ③observer:监听器实例。
  3、利用Observer中的onchange方法,当数据发生变化是,自动执行回调方法。
 
二、项目实践 【步骤】  ①定义Observer监听器
  ②获取到联系人ContentResolver
  ③注册Observer。
  ④重要的一点:添加访问权限(动态也要)
  ⑤注销Observer
【项目结构】

Android ContenObserver 监听联系人数据变化

文章图片

【MainActivity】    【提示】:这里将Observer写成内部类的形式。代码只有这一部分,其他的无需添加。
1 import android.Manifest; 2 import android.content.ContentResolver; 3 import android.content.pm.PackageManager; 4 import android.database.ContentObserver; 5 import android.net.Uri; 6 import android.os.Handler; 7 import android.provider.ContactsContract; 8 import android.support.v4.app.ActivityCompat; 9 import android.support.v7.app.AppCompatActivity; 10 import android.os.Bundle; 11 import android.util.Log; 12 import android.widget.Toast; 13 14 public class MainActivity extends AppCompatActivity { 15 16ContentResolver resolver = null; 17Observer observer = null; 18@Override 19protected void onCreate(Bundle savedInstanceState) { 20super.onCreate(savedInstanceState); 21setContentView(R.layout.activity_main); 22 23//动态权限申请(同时也要在AndroidManifest文件问进行申请权限) 24if (ActivityCompat.checkSelfPermission(this, 25Manifest.permission.READ_CONTACTS)!= 26PackageManager.PERMISSION_GRANTED); 27ActivityCompat.requestPermissions( 28MainActivity.this, 29new String[]{ Manifest.permission.READ_CONTACTS 30},0); 31 32//实例化Observer 33observer = new Observer(new Handler()); 34//获取resolver 35resolver = getContentResolver(); 36Uri uri = ContactsContract.Contacts.CONTENT_URI; 37//注册Observer 38resolver.registerContentObserver(uri,true,observer); 39 40} 41 42class Observer extends ContentObserver{ 43 44public Observer(Handler handler) { 45super(handler); 46} 47 48@Override 49public void onChange(boolean selfChange) { 50super.onChange(selfChange); 51Toast.makeText(MainActivity.this, 52"联系人列表发生变化",Toast.LENGTH_SHORT).show(); 53//onchange 方法中添加Toast便于观察 54} 55} 56 57@Override 58public void onDetachedFromWindow() { 59super.onDetachedFromWindow(); 60//在Activity中注销observer 61resolver.unregisterContentObserver(observer); 62} 63 }

 
【效果】刚刚删除了一条联系人信息
Android ContenObserver 监听联系人数据变化

文章图片

【小结】  ①ContentObserver能够及时的检测到ContentProvider提供的数据变化。
②ContentObserver不仅能够针对系统提供的,也可以自己创建的程序之间通过ContentObserver,ContentResolver进行通信
 
【Android ContenObserver 监听联系人数据变化】 

    推荐阅读