我可以捕捉短信,可以看到发件人的电话,正文,如果我不喜欢这个短信我可以中止广播,但我不知道如何将这个短信标记为已读,该用户可以稍后在框中读取.我有什么想法可以做到这一点?
Nam*_*lay 28
这可能对您有所帮助:
private void markMessageRead(Context context, String number, String body) {
Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
try{
while (cursor.moveToNext()) {
if ((cursor.getString(cursor.getColumnIndex("address")).equals(number)) && (cursor.getInt(cursor.getColumnIndex("read")) == 0)) {
if (cursor.getString(cursor.getColumnIndex("body")).startsWith(body)) {
String SmsMessageId = cursor.getString(cursor.getColumnIndex("_id"));
ContentValues values = new ContentValues();
values.put("read", true);
context.getContentResolver().update(Uri.parse("content://sms/inbox"), values, "_id=" + SmsMessageId, null);
return;
}
}
}
}catch(Exception e)
{
Log.e("Mark Read", "Error in Read: "+e.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
由于Android 4.4 KitKat唯一的应用程序可以修改短信数据 - 设置为默认的短信应用程序
只有接收SMS_DELIVER_ACTION广播的应用程序(用户指定的默认SMS应用程序)才能写入由android.provider.Telephony类和子类定义的SMS提供程序
更多信息可以在这里找到:http://android-developers.blogspot.ru/2013/10/getting-your-sms-apps-ready-for-kitkat.html
这里给出了答案:将sms设置为在Android中读取
ContentValues values = new ContentValues();
values.put("read",true);
getContentResolver().update(Uri.parse("content://sms/inbox"),values,
"_id="+SmsMessageId, null);
Run Code Online (Sandbox Code Playgroud)
其中"_id"是邮件的ID
编辑,感谢NilayOnAndroid!