最近有个朋友问了我如何接受指定号码的短信,并且不让系统截取到通知用户。真好前端时间看天朝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);
}
}
分享到:
相关推荐
在应用不再需要监听数据库变化时,记得注销`ContentObserver`,防止内存泄漏: ```java contentResolver.unregisterContentObserver(myContentObserver); ``` `MyContentObserver`是文件列表中提供的示例类,可能...
不同的MIME Type决定了ContentObserver监听的Uri类型,从而影响其触发的行为。 5. **处理变化的方式** - `onChange()`方法中的`selfChange`参数通常用于区分变化是由ContentObserver自身引起还是由其他外部因素...
Android 系统中有多种方式可以监听数据库中的内容变化,例如使用 CursorAdapter 对象,这些对象可以自动注册到 Uri 上,并在 Uri 的内容发生变化时自动刷新。 Android 数据库内容变化的监听机制是 Android 系统中...
通过ContentProvider(内容提供者)将app中数据库对外开放(当然也可以对app本身开发);然后对数据库的增删改查就通过...然后用ContentObserver(内容观察者)来监听数据是否有变化。当有变化则就调用onChange方法了!
4. 使用ContentObserver:在需要监听数据库变化的地方,创建一个ContentObserver实例,然后通过ContentResolver的registerContentObserver()方法注册。在ContentObserver的onChange()方法中处理数据变化。 现在,...
使用ContentObserver监听数据库变化 ```java private ContentObserver mDownloadsObserver = new DownloadsChangeObserver(Downloads.CONTENT_URI); ``` 创建一个`ContentObserver`实例来监听特定URI下的内容变化...
通过深入理解`ContentObserver`的使用、如何动态查询和更新短信数据库,以及如何在系统事件中注册监听器,开发者可以更好地利用Android平台提供的强大功能,构建出更加智能和响应迅速的应用程序。同时,需要注意的是...
当ContentResolver中的数据发生变化时,如SQLite数据库中的数据更新或删除,ContentObserver会接收到相应的通知。开发者可以通过实现ContentObserver的onChange()方法来处理这些变化。 二、ContentObserver的工作...
在描述中提到的`ContentObserverTest`工程,很可能是用来演示如何使用ContentObserver来监听和响应数据更新的。 在`ContentObserverTest`中,开发者可能会创建一个ContentObserver的实例,然后使用`...
4. 创建`ContentObserver`监听数据库变化,并通过`Handler`更新UI。 5. 在活动的生命周期方法中注册和注销`ContentObserver`。 这样的实现方式使得应用能够记录和展示接收到的广播信息,提供了一种跟踪系统广播行为...
为了解决这些问题,我们需要结合使用`ContentObserver`监听媒体库的变化。`ContentObserver`可以观察到系统媒体数据库的变化,当新的截图被添加到媒体库时,我们同样可以得到通知。同时,我们需要在判断是否为同一...
ContentObserver是基于观察者设计模式,可以监听特定URI(统一资源标识符)引起的数据库的变化。当被观察的URI对应的数据库发生变化时,系统会自动调用ContentObserver的onChange()方法。下面详细讲述...
当数据改变时,通过ContentObserver监听数据库变化,实时更新UI。 对于文件名称"AndroidStudio简单记事本",这很可能是一个包含源代码和资源文件的项目。在Android Studio中,你需要理解布局文件(XML)如何定义...
2. 观察者(ContentObserver):使用 ContentObserver 来观察指定 Uri 引起的数据库变化,继而做一些相应的处理。这种方式效率高内存消耗少,在项目中应该使用这种方法。 在使用 ContentObserver 时,我们需要注册...
内容观察者(ContentObserver)是Android系统中一个关键的组件,它主要用于监控数据内容的变化,如联系人、短信等数据库的变更。这个概念是基于观察者模式,它允许应用程序订阅并接收数据变化的通知,以便在数据发生...
- **监听**:在Android中,监听通常涉及注册广播接收器、服务或者ContentObserver,用于监听特定事件的发生,如系统广播、数据库变化等。 - **打开app**:在Android中,应用的启动和关闭都是通过Activity的生命周期...
5. 监听数据库:通过ContentObserver监听数据库变化,实时更新UI显示的下载进度。 6. 恢复下载:应用程序启动时检查数据库中的未完成任务,恢复断点续传下载。 五、优化与注意事项 1. 错误处理:对网络异常、磁盘...
综上所述,通过结合ContentObserver监听短信变化和正则表达式解析短信内容,我们可以实现在Android应用中自动填充接收到的验证码,从而提升用户体验。但需要注意的是,为了用户的隐私和安全,务必遵循相关法律法规,...