Is there a good way to tell when an SMS gets read

2019-07-17 08:01发布

I'm playing around with a small notification app. My basic requirements are: when an SMS comes in, turn on the LED. When it gets read, turn it off. The first part seems easy enough: I have a BroadcastReceiver with the following in my manifest:

<intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>

However, the second part has proven more tricky. Currently, I have a service which starts up whenever a message comes in. It runs a TimerTask every 15 seconds which runs this code:

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;

It seems to work well enough. When the count is 0, I cancel the TimerTask and stop the service. However, I'm concerned about battery life. Is there any sort of general notification for when the number of unread messages changes? Or any better way of doing this?

标签: android sms
1条回答
迷人小祖宗
2楼-- · 2019-07-17 08:19

You can use ContentObserver. I suppose when a new message comes into sms inbox, you will get a notification (by content observer), on the other hand, when a sms has been read, it will be removed from inbox, and also you will get another notification.

ps, Use ContentObserver observing on content://sms/inbox

查看更多
登录 后发表回答