在 4.4.4 上从 android 中删除 SMS(删除后受影响的行 = 0(零))

Posted

技术标签:

【中文标题】在 4.4.4 上从 android 中删除 SMS(删除后受影响的行 = 0(零))【英文标题】:Delete SMS from android on 4.4.4 (Affected rows = 0(Zero), after deleted) 【发布时间】: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 否。根据以下答案,这是不可能的 我已经成功删除了我所有的收件箱消息,你想这样做吗? 目前,不需要。项目完成。在下面分享,可能对某些人有用 你从收件箱中删除短信是什么意思?? 【参考方案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秒后删除, 通知也会消失。

【讨论】:

以上是关于在 4.4.4 上从 android 中删除 SMS(删除后受影响的行 = 0(零))的主要内容,如果未能解决你的问题,请参考以下文章

锤子T1(Smartisan T1 4G)版刷成3G版,即sm705运行sm701的CM11 Android 4.4.4ROM      

如何在单击按钮上从微调器中删除所选项目?

20165234 《基于Python的GMSSL实现》课程设计个人报告

如何在 Android 上从蓝牙的 InputStream 中读取

在 Android 上从视频播放中捕获 YUV 帧

在 Android 上从 pdf 生成缩略图