android - 有没有什么好方法可以判断 Android 上的短信何时被读取?

标签 android sms

我正在玩一个小型通知应用程序。我的基本要求是:当短信进来时,打开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/

相关文章:

java - 在 android 中使用共享首选项尝试保存字符串但在空对象上出现空点异常错误

Android Spinner 在自定义 ListView 中不完全可见

java - onFaceDetection 在运行时只调用一次或两次,但在使用断点调试时可以完美运行

iphone - iOS以编程方式更改SMSC

android - 按升序排列 SMS 消息

Android:使用 android.provider.Telephony.Sms.Conversations

android - Safari 中的边距很烦人?

java - AlertDialog show = new AlertDialog.Builder(this) 未定义

iphone - 检测应用程序中的通知

android - 如何在 android 中将 View 放置在其父 View /布局的中心上方