文档章节

通过ContentResolver监听系统短信变化

chenruibing
 chenruibing
发布于 2015/05/27 18:44
字数 274
阅读 530
收藏 1

需要有读取短信的权限

     <uses-permission android:name="android.permission.READ_SMS"/>

ContentResolver注册一个内容观察者

ContentObserver内容观察者监听系统短信的变化

通过ContentResolver来获取短信内容提供者提供的短信信息

package com.heima.jiantingSms;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

public class jiantingSmsActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i("jiantingSmsActivity", "短信");
        Log.i("jiantingSmsActivity", "短信");
        //监听系统短信
        ContentResolver resolver = getContentResolver();
        //注册一个内容观察者观察短信数据库
        resolver.registerContentObserver(Uri.parse("content://sms/"), true, new MyContentObserver(new Handler()));
        
       
    }
    
    //内容观察者
    class MyContentObserver extends ContentObserver{

    	private static final String TAG = "MyContentObserver";
		public MyContentObserver(Handler handler) {
			super(handler);
			// TODO Auto-generated constructor stub
		}

		//当被监听的内容发生改变时回调
		@Override
		public void onChange(boolean selfChange) {
			// TODO Auto-generated method stub
			Log.i(TAG, "短信改变了");
			
			Uri uri = Uri.parse("content://sms/outbox");  //发件箱uri
			
			//查看发件箱内容
			ContentResolver resolver = getContentResolver();
			Cursor cursor = resolver.query(uri, new String[]{"address","date","body"}, null, null, null);
			if(cursor!=null && cursor.getCount()>0){
				String address;
				long date;
				String body;
				while(cursor.moveToNext()){
					address = cursor.getString(0);
					date = cursor.getInt(1);
					body = cursor.getString(2);
					Log.i(TAG, "address is " + address + " date is " + date + " body is " + body);
				}
				cursor.close();
			}
			
			
		}
    	
    	
    }
}



© 著作权归作者所有

chenruibing
粉丝 12
博文 203
码字总数 109101
作品 0
潮州
私信 提问
内容观察者ContentObserver类详解

ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于 数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便...

骑牛找牛
2014/03/06
0
0
ContentProvider的理解与使用

ContentProvider管理android以结构化方式存放的数据。他以相对安全的方式封装数据并且提供简易的处理机制。Content provider提供不同进程间数据交互的标准化接口。 本文结构: 1.Content Pr...

丁佳辉
2016/06/20
29
1
Android四大组件之ContentProvide(内容提供者)

访问私有数据库 创建一个项目,在项目中利用SQLiteOpenHelper创建一个名称为account的数据库,并在数据库中创建一张名为info的表。 在MainActivity中需要调用以下代码才能创建数据库: 运行程...

早早的太阳
2016/09/25
6
0
Android中内容观察者的使用---- ContentObserver类详解 (转)

前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了 ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对Conte...

娶到笨笨
2014/04/22
0
0
Android中内容观察者的使用---- ContentObserver类详解

原文出处:http://blog.csdn.net/qinjuning/article/details/7047607 前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了Conte...

长平狐
2013/04/25
301
0

没有更多内容

加载失败,请刷新页面

加载更多

抽离css以及公共js

分离css 分离css:为何要把 CSS 文件分离出来,而不是直接一起打包在 JS 中。最主要的原因是我们希望更好地利用缓存。 extract-text-webpack-plugin > 1. 假设我们原本页面的静态资源都打包成...

莫西摩西
37分钟前
0
0
面向对象的7大原则

https://blog.csdn.net/u010355144/article/details/44940171

南桥北木
55分钟前
1
0
Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用

Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的。 如何设置才能让出来呢? 1:打开"系统管理"——"Configure Global Sec...

shzwork
今天
2
0
BAT面试必问HashMap源码分析

HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈...

别打我会飞
今天
6
0
RISC-V双周简报0x1f:一晚上写个RISC-V处理器玩玩(2018-09-01)

https://cnrv.io/bi-week-rpts/2018-09-01 https://blog.csdn.net/zoomdy/article/details/82914730...

whoisliang
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部