以编程方式删除Android SMS

我想在我的Android应用程序中自动删除一些特定的短信。 因此,我有一个方法,正是我想要做的。 但是,只有当我从Eclipse直接将应用程序部署到我的手机时才有效。 然后删除收到的短信。 但是,如果应用程序是从市场下载的,则不起作用。 但是也没有错误。 有没有人知道我可以如何解决这个问题,或者这只能在根植设备上工作?

public void deleteSMS(Context context, String message, String number) { try { mLogger.logInfo("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" }, null, 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); if (message.equals(body) && address.equals(number)) { mLogger.logInfo("Deleting SMS with id: " + threadId); context.getContentResolver().delete( Uri.parse("content://sms/" + id), null, null); } } while (c.moveToNext()); } } catch (Exception e) { mLogger.logError("Could not delete SMS from inbox: " + e.getMessage()); } } 

Related of "以编程方式删除Android SMS"

其实,我的post中的代码是100%正确的。 问题在于Android收到短信需要一些时间来存储短信。 所以解决方法是只添加一个处理程序,并延迟删除请求1或2秒。

这实际上解决了整个问题。

编辑(感谢Maksim Dmitriev):

请考虑,您不能使用Android 4.4在设备上删除短信。

此外,系统现在只允许默认应用程序将消息数据写入提供程序,但其他应用程序可以随时读取。

http://developer.android.com/about/versions/kitkat.html

如果你尝试,不会有任何exception。 什么都不会被删除。 我刚刚在两个模拟器上进行了testing。

如何以编程方式发送SMS消息

请考虑,您不能使用Android 4.4在设备上删除短信。

此外,系统现在只允许默认应用程序将消息数据写入提供程序,但其他应用程序可以随时读取。

http://developer.android.com/about/versions/kitkat.html

如果你尝试,不会有任何exception。 什么都不会被删除。 我刚刚在两个模拟器上进行了testing。

如何以编程方式发送SMS消息

嘿用这个代码删除自定义短信1.按date2.按数字3.按正文

 try { Uri uriSms = Uri.parse("content://sms/inbox"); Cursor c = context.getContentResolver().query( uriSms, new String[] { "_id", "thread_id", "address", "person", "date", "body" }, "read=0", 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); String date = c.getString(3); Log.e("log>>>", "0--->" + c.getString(0) + "1---->" + c.getString(1) + "2---->" + c.getString(2) + "3--->" + c.getString(3) + "4----->" + c.getString(4) + "5---->" + c.getString(5)); Log.e("log>>>", "date" + c.getString(0)); ContentValues values = new ContentValues(); values.put("read", true); getContentResolver().update(Uri.parse("content://sms/"), values, "_id=" + id, null); if (message.equals(body) && address.equals(number)) { // mLogger.logInfo("Deleting SMS with id: " + threadId); context.getContentResolver().delete( Uri.parse("content://sms/" + id), "date=?", new String[] { c.getString(4) }); Log.e("log>>>", "Delete success........."); } } while (c.moveToNext()); } } catch (Exception e) { Log.e("log>>>", e.toString()); } 

你可以select哪个应用程序是4.4+的默认短信应用程序,如果你的应用程序被设置为默认,它也将能够删除短信。

使应用程序作为默认应用程序看到这个 。

 public void deleteSMS(Context context,int position) { Uri deleteUri = Uri.parse("content://sms"); int count = 0; Cursor c = context.getContentResolver().query(deleteUri, null, null, null, null); while (c.moveToNext()) { try { // Delete the SMS String pid = c.getString(0); // Get id; String uri = "content://sms/" + pid; count = context.getContentResolver().delete(Uri.parse(uri), null, null); } catch (Exception e) { } } } 

它删除所有(收件箱,发件箱,草稿)的短信。

 private int deleteMessage(Context context, SmsMessage msg) { Uri deleteUri = Uri.parse("content://sms"); int count = 0; Cursor c = context.getContentResolver().query(deleteUri, null, null, null, null); while (c.moveToNext()) { try { // Delete the SMS String pid = c.getString(0); // Get id; String uri = "content://sms/" + pid; count = context.getContentResolver().delete(Uri.parse(uri), null, null); } catch (Exception e) { } } return count; } use this code............. 

要么

 getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null);