我正在玩一个小型通知应用程序。我的基本要求是:当短信进来时,打开LED。当它被读取时,将其关闭。第一部分似乎很简单:我有一个 BroadcastReceiver
, list 中包含以下内容:
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
然而,事实证明第二部分更加棘手。目前,我有一个服务,每当有消息传入时就会启动。它每 15 秒运行一次 TimerTask
并运行以下代码:
int count = 0;
Uri providerURI = Uri.parse( "content://sms" );
Cursor cursor = this.getContentResolver().query( providerURI, null, "read=0", null, null );
if( cursor != null ) {
try {
count = cursor.getCount();
}
finally {
cursor.close();
}
}
return count;
看起来效果很好。当计数为 0 时,我取消 TimerTask 并停止服务。不过,我担心电池生命周期。当未读消息数量发生变化时,是否有任何常规通知?或者有更好的方法吗?
最佳答案
您可以使用ContentObserver。我想当一条新消息进入短信收件箱时,您将收到一条通知(通过内容观察者),另一方面,当短信被读取时,它将从收件箱中删除,并且您还会收到另一条通知。
ps,使用ContentObserver观察content://sms/inbox
关于android - 有没有什么好方法可以判断 Android 上的短信何时被读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4709335/