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
【项目结构】

【MainActivity】
【提示】:这里将Observer写成内部类的形式。代码只有这一部分,其他的无需添加。
import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.provider.ContactsContract;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast; public class MainActivity extends AppCompatActivity { ContentResolver resolver = null;
Observer observer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //动态权限申请(同时也要在AndroidManifest文件问进行申请权限)
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.READ_CONTACTS)!=
PackageManager.PERMISSION_GRANTED);
ActivityCompat.requestPermissions(
MainActivity.this,
new String[]{ Manifest.permission.READ_CONTACTS
},0); //实例化Observer
observer = new Observer(new Handler());
//获取resolver
resolver = getContentResolver();
Uri uri = ContactsContract.Contacts.CONTENT_URI;
//注册Observer
resolver.registerContentObserver(uri,true,observer); } class Observer extends ContentObserver{ public Observer(Handler handler) {
super(handler);
} @Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Toast.makeText(MainActivity.this,
"联系人列表发生变化",Toast.LENGTH_SHORT).show();
//onchange 方法中添加Toast便于观察
}
} @Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
//在Activity中注销observer
resolver.unregisterContentObserver(observer);
}
}
【效果】刚刚删除了一条联系人信息

【小结】
①ContentObserver能够及时的检测到ContentProvider提供的数据变化。
②ContentObserver不仅能够针对系统提供的,也可以自己创建的程序之间通过ContentObserver,ContentResolver进行通信
Android ContenObserver 监听联系人数据变化的更多相关文章
- e793. 监听JSpinner数据变化
// Create a nummber spinner JSpinner spinner = new JSpinner(); // Add the listener spinner.addChange ...
- 如何在组件中监听vuex数据变化(当vuex中state变化时,子组件需要进行更新,怎么做?)
todo https://blog.csdn.net/qq_37899792/article/details/97640434
- Android监听手机网络变化
Android监听手机网络变化 手机网络状态发生变化会发送广播,利用广播接收者,监听手机网络变化 效果图 注册广播接收者 <?xml version="1.0" encodi ...
- Android如何监听蓝牙耳机的按键事件
写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的 ...
- Android如何监听蓝牙耳机的按键事件(转)
源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「 ...
- Android怎样监听蓝牙耳机的按键事件
Android怎样监听蓝牙耳机的按键事件 写在前面: 直接想要代码非常easy,你直接把滚动栏拉到最底端就能够看到.假设想要十分地了解为什么,那就依照我规划的一步一步来理解.下面測试环境以手头上有的「 ...
- Android来电监听和去电监听
我觉得写文章就得写得有用一些的,必须要有自己的思想,关于来电去电监听将按照下面三个问题展开 1.监听来电去电有什么用? 2.怎么监听,来电去电监听方式一样吗? 3.实战,有什么需要特别注意地方? 监听 ...
- 监听EditText的变化
http://liangruijun.blog.51cto.com/3061169/729505 之前博客上的有关EditText的文章,只是介绍EditText的一些最基本的用法,这次来深入学习一下 ...
- Android实时监听网络状态
Android实时监听网络状态(1) 其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...
随机推荐
- jQuery ajax如何传多个值到后台页面,举例:
一.js代码 <script type="text/JavaScript">$("#save_change_<{$aff.Id}>"). ...
- 【从零开始搭建自己的.NET Core Api框架】(二)搭建项目的整体架构
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- 机器学习入门 - Google机器学习速成课程 - 笔记汇总
机器学习入门 - Google机器学习速成课程 https://www.cnblogs.com/anliven/p/6107783.html MLCC简介 前提条件和准备工作 完成课程的下一步 机器学 ...
- IntelliJ IDEA下SVN的配置及使用说明
1 下载及安装SVN客户端. 到官网下载小乌龟SVN客户端,官网地址:https://tortoisesvn.net/downloads.html,根据操作系统情况选择适合版本.比如64为操作系统,如 ...
- 1.MySQL(一)
数据库简介 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 RDBMS 即关系数据库管理系统(Relational Database Management System) 1.特 ...
- 让 CDN 更省流量的 Brotli 算法详解
早年,我还是学生的时候,时常会鼓捣自己的个人网站,其中最困扰我的问题就是源站服务器易崩溃.作为学生,一方面我没有足够的钱购买高质量的服务器,另一方面一年的流量费用算下来也挺贵的,要花掉我不少的生活费. ...
- 微信小程序代码构成
一.小程序代码 app.json 是当前小程序的全局配置,包括了小程序的所有页面路径.界面表现.网络超时时间.底部tab等. { "pages":[ "pages/ind ...
- Spring Security OAuth 2.0
续·前一篇<OAuth 2.0> OAuth 2.0 Provider 实现 在OAuth 2.0中,provider角色事实上是把授权服务和资源服务分开,有时候它们也可能在同一个应用中, ...
- macOS的OpenCL高性能计算
随着深度学习.区块链的发展,人类对计算量的需求越来越高,在传统的计算模式下,压榨GPU的计算能力一直是重点. NV系列的显卡在这方面走的比较快,CUDA框架已经普及到了高性能计算的各个方面,比如Goo ...
- windows git 上传
1.打开git.bash 2. 告诉要传的git的用户名字 和邮箱地址 git config --global user.name "CardLove" git config -- ...