`
mgssnake
  • 浏览: 42365 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

使用ContentObserver监听数据库变化

阅读更多
最近有个朋友问了我如何接受指定号码的短信,并且不让系统截取到通知用户。真好前端时间看天朝group,也有个朋友问了这个问题,而且通过ContentObserver方式解决了。我这里就把我实现的代码贴出来,以便需要的朋友参考,最近Google-groups上不去,很是郁闷啊。
public class ScreenTest extends Activity {
	
	class SmsContent extends ContentObserver{
		private Cursor cursor = null;
		public SmsContent(Handler handler) {
			super(handler);
		}
		
		/**
		 * @Description 当短信表发送改变时,调用该方法 
		 * 				需要两种权限
		 * 				android.permission.READ_SMS读取短信
		 * 				android.permission.WRITE_SMS写短信
		 * @Author Snake
		 * @Date 2010-1-12
		 */
		@Override
		public void onChange(boolean selfChange) {
			// TODO Auto-generated method stub
			super.onChange(selfChange);
			//读取收件箱中指定号码的短信
			cursor = managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read"}, " address=? and read=?", new String[]{"12345678901", "0"}, "date desc");
			
			if (cursor != null){
				ContentValues values = new ContentValues();
				values.put("read", "1");		//修改短信为已读模式
				cursor.moveToFirst();
				while (cursor.isLast()){
					//更新当前未读短信状态为已读
					getContentResolver().update(Uri.parse("content://sms/inbox"), values, " _id=?", new String[]{""+cursor.getInt(0)});
					cursor.moveToNext();
				}
			}
		}
	}
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        SmsContent content = new SmsContent(new Handler());
        //注册短信变化监听
        this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content); 
    }
}

分享到:
评论
10 楼 zhq56030207 2010-12-27  
你好,我想问一下,关于短信的监听问题,具体的是短信会话的监听~就是监听不到~~~不知道是怎么回事?
9 楼 huangbq 2010-09-10  
不知道为什么,我注册监听发短信,发现onChange方法被执行3次,看log才发现,前两条是是上一次发送的短信,第三条才是本次发送的短信!不知道为什么?
还有就是我注册监听,我只想监听发件箱的变化,我使用getContentResolver().registerContentObserver(Uri.parse("content://sms/sent"), true, smsObserver);好像不起任何作用!不知道为什么?
8 楼 sjl599 2010-04-28  
这样很不好。。。
7 楼 lveyo 2010-03-23  
加一个receiver,注册开机启动

<receiver android:name="BootCompletedReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
	<intent-filter>
		<action android:name="android.intent.action.BOOT_COMPLETED"/>
		<action android:name="android.intent.action.USER_PRESENT"/>
	</intent-filter>
</receiver>
6 楼 luyi-jn 2010-03-18  
如何开机时 自动注册这个 observer 呢?
5 楼 sunburst 2010-01-13  
不错,感谢楼主分享
4 楼 mgssnake 2010-01-12  
膜拜hong老大
信hong老大,赚美刀!
3 楼 BarryWei 2010-01-12  
mgssnake 写道
BarryWei 写道
引用
最近Google-groups上不去,很是郁闷啊。

将域名最后的com换成de或者co.nz
试试一些其他地区的groups域名 可以登录的


非常感谢,终于上去了,谢谢
之前也试过换后缀,不过没换过de之类的

呵呵
被墙了之后 我也上不去
还是多亏hong哥给了连接 大家要感谢他 hong哥在javaeye很热心
2 楼 mgssnake 2010-01-12  
BarryWei 写道
引用
最近Google-groups上不去,很是郁闷啊。

将域名最后的com换成de或者co.nz
试试一些其他地区的groups域名 可以登录的


非常感谢,终于上去了,谢谢
之前也试过换后缀,不过没换过de之类的
1 楼 BarryWei 2010-01-12  
引用
最近Google-groups上不去,很是郁闷啊。

将域名最后的com换成de或者co.nz
试试一些其他地区的groups域名 可以登录的

相关推荐

    自定义ContentObserver监听数据库数据变化

    在应用不再需要监听数据库变化时,记得注销`ContentObserver`,防止内存泄漏: ```java contentResolver.unregisterContentObserver(myContentObserver); ``` `MyContentObserver`是文件列表中提供的示例类,可能...

    Android 使用ContentObserver监听数据库内容是否更改

    不同的MIME Type决定了ContentObserver监听的Uri类型,从而影响其触发的行为。 5. **处理变化的方式** - `onChange()`方法中的`selfChange`参数通常用于区分变化是由ContentObserver自身引起还是由其他外部因素...

    Android数据库内容变化的监听

    Android 系统中有多种方式可以监听数据库中的内容变化,例如使用 CursorAdapter 对象,这些对象可以自动注册到 Uri 上,并在 Uri 的内容发生变化时自动刷新。 Android 数据库内容变化的监听机制是 Android 系统中...

    通过ContentProvider监听数据库中数据变化

    通过ContentProvider(内容提供者)将app中数据库对外开放(当然也可以对app本身开发);然后对数据库的增删改查就通过...然后用ContentObserver(内容观察者)来监听数据是否有变化。当有变化则就调用onChange方法了!

    两个apk之间广播互相通信及ContentProvider监听数据库的变换

    4. 使用ContentObserver:在需要监听数据库变化的地方,创建一个ContentObserver实例,然后通过ContentResolver的registerContentObserver()方法注册。在ContentObserver的onChange()方法中处理数据变化。 现在,...

    20个很有用的android应用程序代码

    使用ContentObserver监听数据库变化 ```java private ContentObserver mDownloadsObserver = new DownloadsChangeObserver(Downloads.CONTENT_URI); ``` 创建一个`ContentObserver`实例来监听特定URI下的内容变化...

    android 监听短信数据库

    通过深入理解`ContentObserver`的使用、如何动态查询和更新短信数据库,以及如何在系统事件中注册监听器,开发者可以更好地利用Android平台提供的强大功能,构建出更加智能和响应迅速的应用程序。同时,需要注意的是...

    Android中内容观察者的使用---- ContentObserver类详解

    当ContentResolver中的数据发生变化时,如SQLite数据库中的数据更新或删除,ContentObserver会接收到相应的通知。开发者可以通过实现ContentObserver的onChange()方法来处理这些变化。 二、ContentObserver的工作...

    contentprovider+contentobserver

    在描述中提到的`ContentObserverTest`工程,很可能是用来演示如何使用ContentObserver来监听和响应数据更新的。 在`ContentObserverTest`中,开发者可能会创建一个ContentObserver的实例,然后使用`...

    Android实现静态广播监听器的方法

    4. 创建`ContentObserver`监听数据库变化,并通过`Handler`更新UI。 5. 在活动的生命周期方法中注册和注销`ContentObserver`。 这样的实现方式使得应用能够记录和展示接收到的广播信息,提供了一种跟踪系统广播行为...

    android截图事件监听的原理与实现

    为了解决这些问题,我们需要结合使用`ContentObserver`监听媒体库的变化。`ContentObserver`可以观察到系统媒体数据库的变化,当新的截图被添加到媒体库时,我们同样可以得到通知。同时,我们需要在判断是否为同一...

    详解Android开发中ContentObserver类的使用

    ContentObserver是基于观察者设计模式,可以监听特定URI(统一资源标识符)引起的数据库的变化。当被观察的URI对应的数据库发生变化时,系统会自动调用ContentObserver的onChange()方法。下面详细讲述...

    安卓开发简单的记事本

    当数据改变时,通过ContentObserver监听数据库变化,实时更新UI。 对于文件名称"AndroidStudio简单记事本",这很可能是一个包含源代码和资源文件的项目。在Android Studio中,你需要理解布局文件(XML)如何定义...

    黑马程序员安卓教程:内容观察者的原理.docx

    2. 观察者(ContentObserver):使用 ContentObserver 来观察指定 Uri 引起的数据库变化,继而做一些相应的处理。这种方式效率高内存消耗少,在项目中应该使用这种方法。 在使用 ContentObserver 时,我们需要注册...

    内容观察者

    内容观察者(ContentObserver)是Android系统中一个关键的组件,它主要用于监控数据内容的变化,如联系人、短信等数据库的变更。这个概念是基于观察者模式,它允许应用程序订阅并接收数据变化的通知,以便在数据发生...

    android监听手机app启动

    - **监听**:在Android中,监听通常涉及注册广播接收器、服务或者ContentObserver,用于监听特定事件的发生,如系统广播、数据库变化等。 - **打开app**:在Android中,应用的启动和关闭都是通过Activity的生命周期...

    android多线程下载断点续传

    5. 监听数据库:通过ContentObserver监听数据库变化,实时更新UI显示的下载进度。 6. 恢复下载:应用程序启动时检查数据库中的未完成任务,恢复断点续传下载。 五、优化与注意事项 1. 错误处理:对网络异常、磁盘...

    Android 中使用ContentObserver模式获取短信用正则自动填充验证码

    综上所述,通过结合ContentObserver监听短信变化和正则表达式解析短信内容,我们可以实现在Android应用中自动填充接收到的验证码,从而提升用户体验。但需要注意的是,为了用户的隐私和安全,务必遵循相关法律法规,...

Global site tag (gtag.js) - Google Analytics