【发布时间】:2013-10-20 11:13:29
【问题描述】:
如果本地(电话)中存在 3 条未读短信,并且用户已阅读其中一条短信。如何识别在我们的应用程序中(从本机)读取了哪些 SMS。
目前我正在使用 ContentObserver 并且当用户从本机(电话)读取 SMS 时调用 onChange() 方法。
我能够收到所有未读短信:
Cursor cursor = this.getContentResolver().query(Uri.parse("content://sms/"), null, "read = 0", null, null);
如何识别从本机(手机)读取的短信。任何帮助或指导将不胜感激。
在 Nexus 4(Android 4.3) - API 18) 中,如果 Android Native Sms Client 中两条未读短信(属于两个不同的发件人)的通知(在设备状态栏中),用户点击该通知,onChange(context, uri ) 在我的应用程序中被调用,在其中我试图获取已读 SMS 的 id:
String id = uri.getLastPathSegment();
对于上述情况,“收件箱”作为“id”的值来了。但是对于用户从 Android Native Sms Client 中读取任何 SMS,不会调用 onChange(context, uri) 方法。
在三星 Galaxy S3(Android 4.1.2 - API 16) 中,onChange(context, uri) 在任何一种情况下都不会被调用(即,如果用户从 Native 读取 SMS 或用户点击通知(在Android Native Sms Client 中两条未读短信(属于两个不同的发件人)的设备状态栏)。
(在 API 16 中,当以原生方式接收到新 SMS 时,会调用 onChange(context, uri) 并且“id”的值等于该 SMS 的唯一 ID - 在 Nexus 4(Android 4.3) 上测试)
注意:这里的“来自本地”是指“来自设备的默认短信客户端”。
【问题讨论】:
-
您有 3 条未读短信,而您已阅读其中一条。如何识别最后一条标记的短信?如果这是您的问题,那么为什么不能取所有“读取”短信的光标的最后一个元素?不知道这是否对您有帮助:( PS 尝试通过 Thread_id 或 _id 排序
标签: android android-contentprovider contentobserver