【问题标题】:Delete SMS from android on 4.4.4 (Affected rows = 0(Zero), after deleted)在 4.4.4 上从 android 中删除 SMS(删除后受影响的行 = 0(零))
【发布时间】:2014-11-17 06:35:35
【问题描述】:

我想从我的 android 设备发送短信并将其从我的设备中删除(已发送消息)。

短信保存在设备(4.4.4)中,但短信没有被我的代码删除。删除后受影响的行 = 0(零)。

我的设备版本是 4.4.4。

在其他设备中,不会保存 SMS。为什么 SMS 会保存在 Android 4.4.4 中?

我不想保存我发送的短信或失败的短信(未发送)。

请帮帮我。

我的权限

<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />

我的代码是发送短信

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(number, null, msg, null, null);

我正在从处理程序调用 deleteSMS() 方法,延迟为 5 秒

Handler handler = new Handler();
handler.postDelayed(new Runnable() {

            @Override
            public void run() {
                String message = CastApplication.mPref.getString(context.getResources().getString(R.string.pref_message_to_friend), "");
                deleteSMS(context, message, number);

                if (MyCastFragment.getInstance() != null) {
                    MyCastFragment.getInstance().updateView();
                }

                progressDialog.dismiss();
                context.finish();
            }
        }, 5000);

删除短信

public void deleteSMS(Context ctx, String message, String number) {
        try {
            Uri uriSms = Uri.parse("content://sms");
            Cursor c = ctx.getContentResolver().query(uriSms,
                new String[] { "_id", "thread_id", "address",
                    "person", "date", "body" }, null, null, null);

            Log.i(TAG, "c count......"+c.getCount());
            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) + "<-1>"  + c.getString(3) + "4>" + c.getString(4)+ "5>" + c.getString(5));
//                    Log.e("log>>>", "date" + c.getString(0));

//                    if (body.contains(getResources().getText(R.string.invite_text).toString()) && address.equals(number)) {
                    if (message.equals(body) && address.equals(number)) {
                        // mLogger.logInfo("Deleting SMS with id: " + threadId);
                        int rows = ctx.getContentResolver().delete(Uri.parse("content://sms/" + id), "date=?",new String[] { c.getString(4) });
                        Log.e("log>>>", "Delete success......... rows: "+rows);
                        Log.e("log>>>", "Delete success......... body: "+body);
                    }
                } while (c.moveToNext());
            }

        } catch (Exception e) {
            Log.e("log>>>", e.toString());
            Log.e("log>>>", e.getMessage());
        }
    }

【问题讨论】:

  • 你是如何解决你的问题的?
  • @ErumHannan 否。根据以下答案,这是不可能的
  • 我已经成功删除了我所有的收件箱消息,你想这样做吗?
  • 目前,不需要。项目完成。在下面分享,可能对某些人有用
  • 你从收件箱中删除短信是什么意思??

标签: android smsmanager


【解决方案1】:

除非您的应用在设备中被标记为默认 SMS 应用,否则您将无法使用 SMS Provider,请阅读有关 KITKAT 的 SMS 指南

【讨论】:

  • 感谢您的回复,您能告诉我如何将我的应用标记为默认短信应用吗?
  • @GangadharNimbally 该链接告诉您需要做什么才能让您的应用成为默认应用。这不是一项微不足道的任务,因为您的应用将负责许多它可能尚未处理的事情。
  • @Mike M,是否有任何示例应用程序可以成为默认短信应用程序。请分享一下我在android上很差
  • @GangadharNimbally 我不知道。但是,开始的地方是该链接。复制清单并添加必要的权限(大约需要 5 或 6 个,IIRC),至少创建一个临时主启动器 Activity,编译并运行一次,并确保它显示在符合条件的默认 SMS 应用程序列表中。这将是最低限度的。然后开始添加附加功能。当然,您可以随时查看 AOSP SMS 应用程序的源代码以获得完整的实现。
  • @GangadharNimbally 按照建议的链接和代码,其中已经提到如何使您的应用程序默认,请仔细阅读文章。
【解决方案2】:

应用可以在 Kitkat 中删除短信,而无需授予默认短信应用。

您只需要 WRITE_SMS 权限 和 AppOpps 操作。

之后你的短信可以在收到后10秒后删除, 通知也会消失。

【讨论】:

    猜你喜欢
    • 2014-12-08
    • 2014-06-22
    • 2013-05-29
    • 2017-05-06
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多