Android -- ContentObserver 内容观察者
来源:互联网 发布:维普考试软件 编辑:程序博客网 时间:2024/05/16 12:51
1. 实现原理图
2. 示例代码
(暂时有个问题,短信观察者 收到一条短信时 onchange方法会执行两次, 解决方法为:每次监听到变化的时候就去取最新短信的id,跟上次取的比较,如果一样的就不做处理,如果不一样,就该干嘛干嘛)
MainActivity.java
public class MainActivity extends Activity {public static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 监听系统的短信数据库的变化ContentResolver resolver = getContentResolver();Uri uri = Uri.parse("content://sms/");//true表示只要uri的前缀相同(content://sms/) 的数据有变化就会被发现resolver.registerContentObserver(uri, true, new SmsObserver(new Handler()));}private class SmsObserver extends ContentObserver {public SmsObserver(Handler handler) {super(handler);}//当观察到数据发生变化的时候 会执行onchange方法.@Overridepublic void onChange(boolean selfChange) {Log.i(TAG,"发现有新的短信产生了...");//1.利用内容提供者 中间人 获取用户的短信数据.ContentResolver resolver = getContentResolver();Uri uri = Uri.parse("content://sms/"); //根据分析 代表的是所有的短信的路径Cursor cursor = resolver.query(uri, new String[]{"address","date","body","type"}, null, null, null);if(cursor.moveToFirst()){String address =cursor.getString(0);String date = cursor.getString(1);String body = cursor.getString(2);String type = cursor.getString(3);System.out.println(address+"--"+date+"---"+body+"---"+type);}cursor.close();super.onChange(selfChange);}}}
3. 怎么实现 ContentObserver
由原理图可知, 在dao层操作时 发信息到消息邮箱即可。
例如在数据库 插入操作时 发一条消息到邮箱,notifyChange的uri可以自己随意定,
third app使用的时候要保持uri一致。
public void add(String name, float money){SQLiteDatabase db = helper.getWritableDatabase();db.execSQL("insert into account (name,money) values (?,?)", new Object[]{name, money});db.close();context.getContentResolver().notifyChange(uri, null);}
0 0
- Android内容观察者--ContentObserver
- Android -- ContentObserver 内容观察者
- Android 中的内容观察者ContentObserver
- android下内容观察者: ContentObserver
- Android 中的内容观察者ContentObserver
- Android中内容观察者的使用---- ContentObserver
- android中ContentObserver——内容观察者
- android之ContentObserver内容观察者的使用
- Android自学笔记-13-ContentObserver内容观察者
- Android内容观察者 --ContentObserver(待写)
- Android 内容观察者—ContentObserver类详解
- Android ContentProvider之ContentObserver内容观察者
- Android的内容观察者-----ContentObserver类
- Android中内容观察者的使用---- ContentObserver
- ContentObserver内容观察者
- ContentObserver 内容观察者
- ContentObserver(内容观察者)
- Android中内容观察者的使用---- ContentObserver类详解
- 如何实现VB.NET 打印控件的使用
- android 关于sdcard assets drawable bitmap 之间处理问题
- tomcat7中cookie写入中文引发Control character in cookie value or attribute异常
- [进程管理]linux 下 进程和线程的区别(baidu 面试)
- 更改Eclipse下Tomcat的部署目录
- Android -- ContentObserver 内容观察者
- SQLyog
- 超简单 五子棋Ai算法
- 十大高明的Google搜索技巧
- 发布到AppStore中的iOS应用程序审查指南
- acm入门搜索-水池数目
- CCTextureCache的多线程加载原理和使用
- QQ 新浪微博 淘宝账号 第三方登陆 (C#)
- Eclipse自动部署项目到Tomcat的webapps下的有效方法