Android ContenObserver 监听联系人数据变化

Android ContenObserver 监听联系人数据变化,第1张

概述一、知识介绍 1、ContentProvider是内容提供者 ContentResolver是内容解决者(对内容提供的数据进行 *** 作) ContentObserver是内容观察者(观察内容提供者提供的数 一、知识介绍

   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 监听联系人数据变化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1121257.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存