我正在删除电话号码任务的特定短信。当我在motog或Android 5.0版的手机上测试时。我无法删除特定号码的短信。我的代码段在下面。
public void deleteSMS(Context context,String number) {
try {
Log.d("","Deleting SMS from inbox");
Uri uriSms = Uri.parse("content://sms/inbox");
Cursor c = context.getContentResolver().query(uriSms,
new String[] { "_id", "thread_id", "address",
"person", "date", "body" }, "address = '"+number+"'", null, null);
if (c != null && c.moveToFirst()) {
do {
long id = c.getLong(0);
long threadId = c.getLong(1);
String address = c.getString(2);
String body = c.getString(5);
Toast.makeText(getApplicationContext(),"SMS with id: " + threadId +" Number:- " +address,Toast.LENGTH_LONG).show();
Log.d("", "SMS with id: " + threadId +" Number:- " +address);
if ( address.equals(number)) {
Log.d("", "Deleting SMS with id: " + threadId);
context.getContentResolver().delete(
Uri.parse("content://sms/" + id), null, null);
}
} while (c.moveToNext());
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(),"Could not delete SMS from inbox ",Toast.LENGTH_LONG).show();
Log.e("", "Could not delete SMS from inbox: " + e.getMessage());
}
}
答案 0 :(得分:9)
4.4之后,除非您的应用是“默认短信应用”,否则不允许从收件箱中删除任何短信。
从Android 4.4开始,系统设置允许用户选择“默认短信应用”。一旦选中,只有默认的SMS应用程序能够写入SMS提供程序,并且当用户收到SMS或当用户收到MMS时,只有默认SMS应用程序接收SMS_DELIVER_ACTION广播时才会收到SMS或WAP_PUSH_DELIVER_ACTION广播。默认的SMS应用程序负责在收到或发送新消息时向SMS提供商写入详细信息。
未选择作为默认短信应用的其他应用只能阅读 SMS提供商 ...
You can see More info here 刚才提到了以下重要部分:
如果您的应用程序设计为默认的SMS应用程序,那么当您的应用程序未被选为默认应用程序时,了解应用程序的限制并根据需要禁用功能非常重要。虽然系统将发送的SMS消息写入SMS提供商,而您的应用程序不是默认的SMS应用程序,但它不会写入已发送的MMS消息,并且您的应用程序无法写入SMS提供程序进行其他操作,例如将消息标记为草稿,将它们标记为已读,删除它们等。