我可以捕捉短信,可以看到发件人的手机,身体,我可以abortBroadcast如果我不喜欢这个短信,但我不知道如何标记这个短信阅读后,该用户可以稍后在盒子中读取。 任何想法我可以做到这一点?Android:如何将短信标记为已读在接收
回答
这可以帮助你:
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());
}
}
我不认为有这方面的任何官方的支持,但这个问题提供了做这件事的方法(还没有尝试过,虽然):Mark MMS as read programmatically
错误的想法,短信说我赶上的onReceive是不是在“内容://短信” – 2011-12-27 03:14:15
@安德鲁 - 它应该是“内容://短信/收件箱” .. – 2012-08-03 09:22:25
的答案已经在这里给出:Set sms as read in Android
ContentValues values = new ContentValues();
values.put("read",true);
getContentResolver().update(Uri.parse("content://sms/inbox"),values,
"_id="+SmsMessageId, null);
其中 “_id” 是消息的ID
编辑,感谢NilayOnAndroid!
它应该是“内容:// sms/inbox“.. – 2012-08-03 09:21:58
由于Android 4.4(KitKat)系统唯一的应用程序可以修改SMS数据 - 这是设置为默认
只接收SMS_DELIVER_ACTION广播应用短信应用(用户指定的默认SMS应用程序)能够写入由android.provider.Telephony类定义的SMS提供程序和子类
更多信息可以在这里找到:http://android-developers.blogspot.ru/2013/10/getting-your-sms-apps-ready-for-kitkat.html
我做了较新的版本的奇巧,从答案here一个workarround:如果有要读取的消息,当用户离开应用程序,开始与我所要的号码的短信应用标记读取的消息。这会自动将所有消息标记为已读。
@Override
public void onBackPressed() {
if (toBeRead) {
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address", smsNumber);
//smsIntent.putExtra("sms_body","Body of Message");
startActivity(smsIntent);
toBeRead = false;
}
}
- 1. 如何在Android上将所有短信标记为已读?
- 2. 在将短信标记为已读后,未读的短信托盘通知会保留为已读
- 3. 接收短信Android
- 4. 如何在android中接收短信?
- 5. 如何在android中接收短信?
- 6. Android:标记短信(SMS)未读
- 7. 如何将我所有的短信标记为未读?
- 8. 将链接标记为已读钩子
- 9. 接收的Android短信
- 10. 短信android接收函数
- 11. Android:接收无声短信?
- 12. 如何在gridview中将记录标记为已读和未读
- 13. Android的 - 如何使用广播接收器来读取短信?
- 14. 如何接收短信
- 15. 在Android中读取收到的短信
- 16. 接收短信
- 17. 如何在收到短信时获取未读短信?
- 18. 在android中无法接收短信
- 19. 如何在Android中收听新短信
- 20. 短信广播接收器在Android中的多个短信
- 21. 在android中发送独特的短信和接收looong短信
- 22. 如何发送短信并在iPhone sdk中接收短信?
- 23. Rails:将记录标记为已读?
- 24. 无法读取短信并开始接收短信的新服务android
- 25. 短信广播接收器不登记
- 26. pjsip接收短信
- 27. 接收短信j2me
- 28. 在android上收听短信
- 29. 取消注册已接收短信的广播接收器
- 30. 短信广播接收器 - 如何在默认短信应用程序读取之前阻止/删除短信
这是读取框中还是特定的所有消息 – Prasad 2015-07-16 09:44:19
不,只是具有_id = SmsMessageId的特定消息 – 2015-07-16 11:46:16
更新查询的返回结果为0。这背后的原因是什么? – 2015-09-30 05:22:35