Android,监控ContentProvider的数据改变

有时候应用中需要监听ContentProvider的改变并提供响应,这时候就要利用ContentObserver类了

不管是ContentProvider中实现的,insert,delete,update方法中的任何一个,程序都会调用getContext().getContentResolver().notifyChange(uri,null);

这行代码可用于通知所有注册在该Uri上的监听者,该ContentProvider所共享的数据发生了改变 

监 听ContentProvider数据改变的监听器需要继承ContentObserver类,并重写该基类所定义的onChange(boolean selfChange)方法,当它所监听的ContentProvider所共享的数据发生改变时,该onChange将会触发

为了监听指定的ContentProvider的数据变化,需要通过ContentResolver向指定Uri注册ContentObserver监听器.

用如下方法来注册监听器

registerContentObserver(Uri uri,boolean notifyForDescendents,ContentObserver observer)

notifyForDescendents :如果该参数设为true,假如Uri为content://abc,那么Uri为content://abc/xyz, content://abc/xyz/foo的数据改变时也会触发该监听器,如果参数为false,那么只有 content://abc的数据改变时会触发该监听器

下面以监听系统的短信为例,下图为模拟发送一条短信

上面有一条短信内容为hello,下面启动监听程序在logcat中打印该短信的相关信息

下面为代码

    package WangLi.IO.MonitorSms;  import android.app.Activity;  import android.database.ContentObserver;  import android.database.Cursor;  import android.net.Uri;  import android.os.Bundle;  import android.os.Handler;  public class MonitorSms extends Activity {  /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  //为content://sms的数据改变注册监听器  this.getContentResolver().registerContentObserver(Uri.parse("content://sms"), true,   new SmsObserver(new Handler()));  }  //根据自定义的ContentObserver监听类  private final class SmsObserver extends ContentObserver  {  public SmsObserver(Handler handler) {  super(handler);  // TODO Auto-generated constructor stub  
            }  public void onChange(boolean selfChange)  {  //查询发送箱中的短信(处于正在发送状态的短信放在发送箱)  Cursor cursor = getContentResolver().query(Uri.parse("content://sms/outbox"),   null, null, null, null);  //遍历查询得到结果集,即可获取用户正在发送的短信  while(cursor.moveToNext())  {  StringBuilder sb = new StringBuilder();  //获取短信的发送地址  sb.append("address=").append(  cursor.getString(cursor.getColumnIndex("address")));  //获取短信标题  sb.append(";subject=").append(  cursor.getString(cursor.getColumnIndex("body")));  //获取短信发送时间  sb.append(";time=").append(  cursor.getLong(cursor.getColumnIndex("date")));  System.out.println("Has Sent SMS:::" + sb.toString());  }  }  }  }  

 

转载于:https://www.cnblogs.com/zhujiabin/p/4601737.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[leetcode]Sort List

题目要求:Sort a linked list in O(n log n) time using constant space complexity. 数据结构定义: 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : v…

北京市中 高英语听说计算机考,2021年北京高考首次英语听说机考时间确定,共五种题型...

从明年开始,北京市高考统考英语科目增加口语考试,连同之前的听力考试一起,实行一年两考。今天,北京教育考试院发布消息,2021年高考英语听说计算机考试首考将于2020年12月12日进行。12月7日起,考生可登陆北京…

NewCode----彩色宝石项链

题目描述: 有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等。有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是…

插件开发-UI插件开发

1.新建类库解决方案,引入命名空间,同时引入要添加UI Form的WebPart(在Portal\UILib目录下)2.继续UFSoft.UBF.UI.Custom.ExtendedPartBase,重写AfterInit()方法,代码如下,便于添加下拉列表按钮,在原单据中UI先新增一下拉…

为博客园选择一个小巧霸气的语法高亮插件

博客园的语法高亮简直蛋疼,于是乎就打算找一个靠谱的插件来改造下。各种百度谷歌,大致得到几个推荐:SyntaxHighlighter,Snippet,Google Code Pretiffy,Highlight,SHJS。其实 SyntaxHighlighter …

计算器软件设计和计算机软件设计区别,求一个模拟计算器程序

# include# include# include# include# define MAX_OPERATOR_NUM 100//运算符栈数组长度# define MAX_DATA_NUM 100//运算数栈数组长度typedef struct OPStack//定义运算符栈{char opStack[MAX_OPERATOR_NUM];int top;}OPStack, *pOPStack;typedef struct DATAStack//定义操作…

python中print语句

学习链接1 学习链接2 1. 如果print语句后面什么符号都没有是个换行语句,也就是是要另起一行。 2. 分号表示下次输出是紧挨着这个光标位置输出. 3. 而逗号是下次输出与这次输出有一定的空格之后接着输出. namekk salutationMr. greetingHello, print greeting,sa…

计算机应用基础论坛贴子怎么发,网络课程论坛中长尾现象的应对策略——以《计算机应用基础》网络课程为例...

摘要:进入21世纪以来,互联网就备受关注.由于我国信息设施资源建设稳步推进,互联网的基础更为坚实,发展更为迅速.据权威数据统计,中国至2009年约拥有130万个BBS论坛,数量为全球第一,然而,作为分享和参与类应用的典型代表(更新博客,发帖/回帖)的使用率仍然偏低.笔者在…

解析Json需要设置Mime

IIS6.0 1.打开IIS添加Mime项 关联扩展名:*.json内容类型(MIME):application/x-javascript 2.添加映射: 位置在IIS对应站点右键属性:”主目录”-”应用程序设置”-”配置”-”映射”-”添加”,会打开”添加/编辑应用程序…

Using the Transient Fault Handling Application Block

http://msdn.microsoft.com/en-us/library/dn440719(vpandp.60).aspx转载于:https://www.cnblogs.com/fengye87626/p/3772555.html

让python脚本像普通程序一样运行

有些时候像运行其他程序一样运行python程序(也叫做脚本),而不是显式使用python解释器。在UNIX中有个标准的实现方法:在脚本首行前面加上#!(叫做pound bang或者shebang),在其后加上用…

Function类型(JS高程3)—— JS学习笔记2015-6-29(第70天)

Function 类型 函数是对象 具有属性和方法,函数名实际上是一个指向函数对象的指针 没有重载; 函数声明和函数表达式 函数声明: function sum (num1, num2){ return num1 num2; } 函数表达式: var sum function(num1, num2){ ret…

PS图片删除需要计算机管理权限,如何使用PsTools工具执行本地/远程PC管理任务

大多数刚入门的管理员都习惯使用 RDP 或其它类似的工具连接到远程 Windows 中进行图形化管理。而 PowerShell 及 PsTools 等工具可以帮助我们在命令行中执行相当多的管理任务,更主要的是可以将其写成脚本来执行周期性重复任务或在管理大批量服务器时提高效率。在企业…

LeetCode:Spiral Matrix I II

Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. 打印螺旋矩阵 逐个环…

TCP为什么需要三次握手和四次挥手

网上已经有很多解释了,就不瞎说了,Mark一些链接作为自己的学习笔记吧。 学习参考链接1 学习参考链接2 学习参考链接3 学习参考链接4 为什么要3次握手 防止已过期的连接请求报文突然又传送到服务器,因而产生错误。 Client发生一个请求连…

不属于个人计算机范围的是,计算机应用基础模拟试卷2

一、1.单项选择题单项选择题每小题1分。在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑。未涂、错涂或多涂均无分。0. 个人计算机属于A.小巨型机B.小型计算机C.微型计算机D&#xf…

Python实验:关灯游戏

文章目录 前言一、设计表二、关键代码三、运行结果小地图,容易难度:中地图,中等难度:大地图,困难难度: 四、完整代码链接总结 前言 这是一个Python实验作业,内容如下: 题目要求&am…

解决Ubuntu14.04在外接显示器不能指定问题的最佳分辨率

通常这种情况发生。在System Settings -> display 你会发现多出了一个 unknown display。这往往是因为你使用质量低劣的视频电缆,例如,几美元VGA线。解决方案有2,质量好的一个改变钢带(有磁场干扰)VGA线…

基础练习 - 数值交换

题目 1 声明两个变量:int n1 10,n2 20,要求将两个变量叫唤,最后输出n1为20,n2为10. (扩展*: 不使用第三个变量如何交换) 解决方案 基本方法 private static void BasicMethod(){int n1 10;int n2 20;Console.WriteLine("n1…

python计算圆的面积

用Python创建一个脚本,要求: 能计算半径为2的圆的面积保留10位小数可以直接执行 #!/usr/bin/env python3 import math print("Area is:{:.10f}".format(math.pi*4))计算圆的面积要用到pi,所以我们引用模块math