【发布时间】:2015-05-23 01:29:00
【问题描述】:
我知道您很想将其标记为重复,但请稍等,让我们用我详细的(但失败的)尝试再过一遍。
策略 1:算法: Answer
第一次触发onChange,获取更新行的id
下次再次触发 onChange 时,获取更新行的 id
匹配id
如果 id 相同则忽略
这种方法的问题在于它容易受到竞争条件的影响。如果在您获得更新行的 id 时,onChange 已触发 第二次,则此算法将失败。这源于我在慢速机器或以最大容量工作的机器上进行测试时的个人经验。
策略2:算法:Answer
重写 DeliverSelfNotifications() 以返回 true。
起初这似乎很有希望,但没有奏效。 我用作参考的代码:
在 Main Activity:OnCreate 方法我注册:
getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new CtObserver(new Handler()));
然后在一个单独的类中:
package com.example.testproject;
import android.database.ContentObserver;
import android.os.Handler;
import android.util.Log;
/**
* @author Time Traveller
*/
public class CtObserver extends ContentObserver {
public CtObserver(Handler handler) {
super(handler);
}
public boolean deliverSelfNotifications(){
return true;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.e("onChange","Fired");
}
}
为什么您应该为这个答案做出贡献:
查询 SMS 内容提供程序是非默认应用程序捕获发送短信。但到目前为止,我还没有为这种方法找到任何令人信服的功能齐全的答案。所以我们真的需要对此有所了解!。
问题:
- 简单地知道 SMS 仅写入内容提供程序一次的功能(未调整)方法是什么?
- 在 Content Observer 类中使用 DeliverSelfNotifications() 的正确方法是什么?
您不需要回答所有问题,只要告诉我们您知道的任何事情。
【问题讨论】:
标签: android sms android-contentprovider onchange contentobserver