无法以编程方式删除短信(默认短信应用程序集)
Cannot delete SMS programatically (Default SMS app set)
我尝试使用此功能从我的 phone 中删除所有短信:
public void wipeOutAllSMS(Context context) {
try {
int rowsDeleted = 0;
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);
// mLogger.logInfo("Deleting SMS with id: " + threadId);
rowsDeleted += context.getContentResolver().delete(Uri.parse("content://sms/" + id), "date=?", new String[]{c.getString(4)});
Log.i("Deleting_SMS", "Delete success for: " + address + ", message = " + body);
} while (c.moveToNext());
}
Log.i("Deleting_SMS", "rows deleted: " + rowsDeleted);
} catch (Exception e) {
Log.e("Deleting_SMS", e.toString());
}
}
不幸的是,"rows_deleted" 始终为 0。它不会删除一条短信。
我添加了以下清单:
权限:
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
其他为了能够select我的应用程序作为默认短信reader:
<!--The following things are needed for this app to became the default sms app in order to have the ability to delete an sms. -->
<!-- BroadcastReceiver that listens for incoming SMS messages -->
<receiver
android:name=".android.broadcast.SmsReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
</receiver>
<!-- BroadcastReceiver that listens for incoming MMS messages -->
<receiver
android:name=".android.broadcast.MmsReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<!-- This one needs too-->
<!-- Service that delivers messages from the phone "quick response" -->
<service android:name=".android.broadcast.HeadlessSmsSendService"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</service>
我还请求启动应用程序的权限,我最终接受了:
if (!PermissionHelper.isPermissionGranted(this, Manifest.permission.SEND_SMS) || !PermissionHelper.isPermissionGranted(this, Manifest.permission.READ_SMS)) {
PermissionHelper.requestPermission(this,
new String[]{
Manifest.permission.SEND_SMS,
Manifest.permission.READ_SMS
});
}
(WRITE_SMS 权限在 Manifest.permisson 中不存在,所以我不能要求。)
我还将我设备上的默认短信reader设置到我的应用程序。但是我不能删除一条短信。
如果可以请帮忙
我使用androidMarshmallow,没有抛出异常。
如果你是默认应用那么你可以这样删除。
Uri.Builder builder;
builder = Sms.CONTENT_URI.buildUpon();
//builder.appendEncodedPath(getSms_id());
builder.appendEncodedPath("your SMS ID here");
Uri uri = builder.build();
context.getContentResolver().delete(uri, null, null);
我尝试使用此功能从我的 phone 中删除所有短信:
public void wipeOutAllSMS(Context context) {
try {
int rowsDeleted = 0;
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);
// mLogger.logInfo("Deleting SMS with id: " + threadId);
rowsDeleted += context.getContentResolver().delete(Uri.parse("content://sms/" + id), "date=?", new String[]{c.getString(4)});
Log.i("Deleting_SMS", "Delete success for: " + address + ", message = " + body);
} while (c.moveToNext());
}
Log.i("Deleting_SMS", "rows deleted: " + rowsDeleted);
} catch (Exception e) {
Log.e("Deleting_SMS", e.toString());
}
}
不幸的是,"rows_deleted" 始终为 0。它不会删除一条短信。
我添加了以下清单:
权限:
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
其他为了能够select我的应用程序作为默认短信reader:
<!--The following things are needed for this app to became the default sms app in order to have the ability to delete an sms. -->
<!-- BroadcastReceiver that listens for incoming SMS messages -->
<receiver
android:name=".android.broadcast.SmsReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
</receiver>
<!-- BroadcastReceiver that listens for incoming MMS messages -->
<receiver
android:name=".android.broadcast.MmsReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<!-- This one needs too-->
<!-- Service that delivers messages from the phone "quick response" -->
<service android:name=".android.broadcast.HeadlessSmsSendService"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</service>
我还请求启动应用程序的权限,我最终接受了:
if (!PermissionHelper.isPermissionGranted(this, Manifest.permission.SEND_SMS) || !PermissionHelper.isPermissionGranted(this, Manifest.permission.READ_SMS)) {
PermissionHelper.requestPermission(this,
new String[]{
Manifest.permission.SEND_SMS,
Manifest.permission.READ_SMS
});
}
(WRITE_SMS 权限在 Manifest.permisson 中不存在,所以我不能要求。)
我还将我设备上的默认短信reader设置到我的应用程序。但是我不能删除一条短信。
如果可以请帮忙
我使用androidMarshmallow,没有抛出异常。
如果你是默认应用那么你可以这样删除。
Uri.Builder builder;
builder = Sms.CONTENT_URI.buildUpon();
//builder.appendEncodedPath(getSms_id());
builder.appendEncodedPath("your SMS ID here");
Uri uri = builder.build();
context.getContentResolver().delete(uri, null, null);