Невозможно удалить SMS программно (набор приложений для SMS по умолчанию)

Я пытаюсь удалить все SMS с телефона с помощью этой функции:

 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. Он не удаляет ни одного SMS.

Я добавил в свой манифест следующее:

Разрешения:

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

Другие вещи, чтобы иметь возможность выбрать мое приложение в качестве программы для чтения смс по умолчанию:

<!--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, поэтому я не могу его запрашивать.)

Я также настроил приложение для чтения смс по умолчанию на своем устройстве. Однако я не могу удалить ни одно смс.

Пожалуйста, помоги, если можешь.

Я использую Marshmallow для Android, никаких исключений.


person Adam Varhegyi    schedule 26.07.2016    source источник
comment
Вы видели какое-либо сообщение в logcat   -  person Android Surya    schedule 26.07.2016


Ответы (1)


Если вы являетесь приложением по умолчанию, вы можете удалить его следующим образом.

  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);
person Sohail Zahid    schedule 26.07.2016