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
【项目结构】【MainActivity】
【提示】:这里将Observer写成内部类的形式。代码只有这一部分,其他的无需添加。
1 import androID.Manifest; 2 androID.content.ContentResolver; 3 androID.content.pm.PackageManager; 4 androID.database.ContentObserver; 5 androID.net.Uri; 6 androID.os.Handler; 7 androID.provIDer.ContactsContract; 8 androID.support.v4.app.ActivityCompat; 9 androID.support.v7.app.AppCompatActivity;10 androID.os.Bundle;11 androID.util.Log;12 androID.Widget.Toast;13 14 public class MainActivity extends AppCompatActivity {15 16 ContentResolver resolver = null;17 Observer observer = 18 @OverrIDe19 protected voID onCreate(Bundle savedInstanceState) {20 super.onCreate(savedInstanceState);21 setContentVIEw(R.layout.activity_main);22 23 //动态权限申请(同时也要在AndroIDManifest文件问进行申请权限)24 if (ActivityCompat.checkSelfPermission(this,25 Manifest.permission.READ_CONTACTS)!=26 PackageManager.PERMISSION_GRANTED);27 ActivityCompat.requestPermissions(28 MainActivity.29 new String[]{ Manifest.permission.READ_CONTACTS30 },0);31 32 实例化Observer 33 observer = new Observer( Handler());34 获取resolver35 resolver = getContentResolver();36 Uri uri = ContactsContract.Contacts.CONTENT_URI;37 注册Observer38 resolver.registerContentObserver(uri,true39 40 }41 42 class Observer ContentObserver{43 44 public Observer(Handler handler) {45 (handler);46 }47 48 @OverrIDe49 voID onChange(boolean selfChange) {50 .onChange(selfChange);51 Toast.makeText(MainActivity.52 "联系人列表发生变化"53 onchange 方法中添加Toast便于观察54 55 56 57 58 onDetachedFromWindow() {59 .onDetachedFromWindow();60 在Activity中注销observer61 resolver.unregisterContentObserver(observer);62 63 }
【效果】刚刚删除了一条联系人信息
【小结】
①ContentObserver能够及时的检测到ContentProvIDer提供的数据变化。
②ContentObserver不仅能够针对系统提供的,也可以自己创建的程序之间通过ContentObserver,ContentResolver进行通信
总结
以上是内存溢出为你收集整理的Android ContenObserver 监听联系人数据变化全部内容,希望文章能够帮你解决Android ContenObserver 监听联系人数据变化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)