【发布时间】:2014-07-05 22:22:54
【问题描述】:
我正在开发一个应用程序,当任何短信标记为已读时通知用户,即使应用程序没有运行
我只是创建了一个 contentobserver 并在服务中注册了它
问题是,如果插入或删除了新的 SMS,则 contentobserver 会运行,但是当 SMS 标记为已读(更新操作)时它不起作用
这是我的服务代码
public class Smssendservice extends Service {
private static Timer timer = new Timer();
private Context ctx;
public IBinder onBind(Intent arg0)
{
return null;
}
public void onCreate()
{
super.onCreate();
ctx = this;
startService();
}
private void startService()
{
//timer.scheduleAtFixedRate(new mainTask(), 0, 5000);
Toast.makeText(getApplicationContext(), "Before Register", Toast.LENGTH_SHORT).show();
final Uri SMS_STATUS_URI = Uri.parse("content://sms");
SMSLogger sl= new SMSLogger();
SMSObserver smsSentObserver = new SMSObserver(sl, ctx);
getContentResolver().registerContentObserver(SMS_STATUS_URI, true, smsSentObserver);
Toast.makeText(getApplicationContext(), "After Register", Toast.LENGTH_SHORT).show();
}
}
我正在服务中注册我的内容观察者
这里是内容观察者代码
public class SMSObserver extends ContentObserver
{
SMSLogger smsLogger;
Context context;
public SMSObserver(SMSLogger smsLogger, Context context) {
super(new Handler());
this.context=context;
this.smsLogger = smsLogger;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
smsLogger.querySMS(context);
}
}
最后这里是 SMS 记录器,如果 SMS 数据发生更改,我会显示 TOAST
public class SMSLogger {
protected void querySMS(Context context) {
Uri uriSMS = Uri.parse("content://sms/");
Cursor cur = context.getContentResolver().query(uriSMS, null, null, null, null);
/* cur.moveToNext(); // this will make it point to the first record, which is the last SMS sent
String body = cur.getString(cur.getColumnIndex("body")); //content of sms
String add = cur.getString(cur.getColumnIndex("address")); //phone num
String time = cur.getString(cur.getColumnIndex("date")); //date
String protocol = cur.getString(cur.getColumnIndex("protocol")); //protocol*/
Toast.makeText(context, "Data Changed CHECK SMS" , Toast.LENGTH_SHORT).show();
/*logging action HERE...*/
}
}
如果插入新短信或删除短信,它会显示此消息“数据已更改检查短信”,但在更新的情况下,吐司不会出现。有什么线索吗?
【问题讨论】:
-
应该“content://sms”通知这样的更新吗?你在哪里读到的?
-
它听插入和删除为什么它不听更新呢?知道如何收听更新动作吗?我应该使用短信/收件箱吗?
-
我有一个问题,如果我们从一个线程中删除多条消息,将能够收到删除特定消息的通知吗?我正在解决给定的问题,但无法得出结论。
标签: android service sms contentobserver