如何注册SMS数据库更改?

如何注册SMS数据库更改?

我试过了:

mCursor = mActivity.getContentResolver().query(Sms.CONTENT_URI, new String[] { Sms.ADDRESS }, null, null, null); mCursor.registerDataSetObserver(mydataSetObserver); 

其中mydataSetObserver的实现方式如下:

  private class MyDataSetObserver extends DataSetObserver { public void onChanged() { System.out.println ("1"); } public void onInvalidated() { System.out.println ("2"); } } 

但是当我尝试在模拟器中发送SMS消息时,MyDataSetObserver永远不会被调用。

你能告诉我为什么吗?

谢谢。

听起来你要做的就是能够对设备上的SMS数据库进行更改。

我过去的方式是使用AndroidManifest.xml中的标签。 我创建的应用程序需要使用READ_SMS权限以及READ_CONTACTS权限,但是获得写入数据库的权限将以相同的方式完成。

我使用以下标记在AndroidManifest.xml文件中定义了这些所需的权限:

您可以使用的权限列表包括WRITE_SMS,它应该为您提供所需的function。

请注意:因为我是新用户,StackOverflow只允许我发布此post的一个超链接,我尝试包含更多信息但是无法这样做。 请访问android开发者网站并搜索AndroidManifest.xml文件,如果需要,请查看更多信息。

DataSetObserver只观察它们注册的DataSetObservable 。 您的MyDataSetObserver已向您的mCursor注册,并将在mCursor更改时(例如,在重新requery之后)通知,但不会在内容由其他进程(如Messaging应用程序)写入时通知。

不幸的是,目前没有好的方法来监听发送短信的事件,最好的选择似乎是轮询content://sms/sent ,可能使用ContentObserver

这个问题是相关的。