在 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实现》课程设计个人报告