Android(java)学习笔记254:ContentProvider使用之内容观察者(观察发出去的短信)
1.新建一个案例如下:

2. 不需要添加权限,同时这里布局文件不做修改,来到MainActivity,如下:
package com.itheima.sendsmslistener; import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.database.ContentObserver;
import android.view.Menu; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new MyObserver(new Handler()));
} private class MyObserver extends ContentObserver{ public MyObserver(Handler handler) {
super(handler);
} @Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
System.out.println("短信的数据库变化了。");
//查询数据库。
}
}
}
3.布署程序到模拟器上,如下:

在系统联系人中添加一个联系人,发送短信给这个联系人,如下:

观察Logcat打印的日志,如下:
09-15 07:42:33.109: I/System.out(644): 短信的数据库变化了。
09-15 07:42:34.739: I/System.out(644): 短信的数据库变化了。
09-15 07:42:35.189: I/System.out(644): 短信的数据库变化了。
我们输入一条短信发送,会打印三条日志,也就是说onChange()方法被调用了3次,也就是说数据库改变了3次,为什么我们输入发送一条短信,数据库改变3次?
答:这是因为,我们发送短信,短信会经过3种状态:" 草稿 " ---> " 发送中 " ---> " 已发送 ";
(1)当我们编辑完短信,短信形成草稿,在数据库中存在标记字段,这个标记字段标记为某个数字或者字符(含义是短信是草稿),这个时候数据库变化,调用一次onChange()方法;
(2)形成草稿的短信 要发送,数据库相应标记字段又要变化(含义短信正在发送),这个时候数据库变化,再次调用一次onChange()方法;
(3)短信发送成功之后,此时短信标记为已发送,这个时候数据库变化,最后一次调用onChange()方法;
这样出现了3次调用onChange()方法
Android(java)学习笔记254:ContentProvider使用之内容观察者(观察发出去的短信)的更多相关文章
- Android(java)学习笔记198:ContentProvider使用之内容观察者(观察发出去的短信)
1.新建一个案例如下: 2. 不需要添加权限,同时这里布局文件不做修改,来到MainActivity,如下: package com.itheima.sendsmslistener; import a ...
- Android 学习笔记之ContentProvider实现数据共享....
PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Android动画学习笔记-Android Animation
Android动画学习笔记-Android Animation 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- Android 数字签名学习笔记
Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- 20145316许心远《Java学习笔记(第8版)》课程总结
20145316许心远<Java学习笔记(第8版)>课程总结 每周读书笔记链接汇总 ▪ 第一周读书笔记 ▪ 第二周读书笔记 ▪ 第三周读书笔记 ▪ 第四周读书笔记 ▪ 第五周读书笔记 ▪ ...
随机推荐
- cxf客户端代码设置设置访问用户名、密码、证书域名不匹配认证通过
最近和第三方联调,需要调用对方的wsdl,但是调用必须的设置用户名.密码验证.在soapUI里面设置用户名.密码调用通过.但是怎么转换成JAVA代码呢,搜索了好多解决方案,现将代码截图如下: 1.SO ...
- directshow filter 调试步骤
1,编写filter 2,在debug模式下build 3,注册filter:控制台cd到工程的debug目录下,即欲注册的filter(.ax文件)目录,xx:>regsvr32 contra ...
- uvalive3026 Period (KMP+结论)
题目链接:http://vjudge.net/problem/viewProblem.action?id=29342 题目大意:给定字符串,找到每个前缀的最大循环节的个数. 首先当然是kmp预处理,接 ...
- hive 桶相关特性分析
1. hive 桶相关概念 桶(bucket)是指将表或分区中指定列的值为key进行hash,hash到指定的桶中,这样可以支持高效采样工作. 抽样( sampling )可以在全体数 ...
- Win7下安装Ubuntu双系统常见问题
[转自己以前的文章] 导航: ● win7下硬盘安装ubuntu常见问题 ● win7下u盘安装ubuntu常见问题 吐槽: Ubuntu的安装花了我将近15个小时,网上常见的.不常见的问题基本我都 ...
- jquery学习(2)toggle
$(function(){ $("#panel h5.head").hover(function(){ //交替执行该函数 $(this).next().show(); },fun ...
- 好用的JQ图片特效jquery-poptrox-popup-galleries
jQuery Poptrox – Popup galleries Rate this (1 Vote) Download Demo jQuery Poptrox Adds popup ga ...
- linux修改环境变量
/etc/profile 系统全局环境变量设定,所有用户共享,修改后,需要重启系统才能生效 ~/.bash_profile,~/.bashrc 用户目录下的私有环境变量设定,常用来个性化定制功能,修改 ...
- xcode改名称、路径后要在终端中设置路径
打印xcode位置: xcode-select -print-path 重新设置xcode位置 sudo xcode-select -switch /Applications/Xcode/Xcode6 ...
- 转:FIFO的定义与作用
一.先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令. 1.什么是FIFO? FIFO是英文Firs ...