Menghapus SMS Android secara terprogram

Saya ingin menghapus beberapa SMS tertentu secara otomatis di aplikasi Android saya. Oleh karena itu, saya memiliki metode yang melakukan apa yang saya inginkan. Namun, metode ini hanya berfungsi jika saya menggunakan aplikasi langsung ke ponsel saya dari Eclipse. Kemudian menghapus SMS yang masuk. Namun, itu tidak berfungsi jika aplikasi diunduh dari pasar. Tetapi juga tidak ada kesalahan. Adakah yang tahu bagaimana saya bisa mengatasi hal ini atau apakah ini hanya bekerja pada perangkat yang di-root?

public void deleteSMS(Context context, String message, String number) {
    try {
        mLogger.logInfo("Deleting SMS from inbox");
        Uri uriSms = Uri.parse("content://sms/inbox");
        Cursor c = context.getContentResolver().query(uriSms,
            new String[] { "_id", "thread_id", "address",
                "person", "date", "body" }, null, 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);

                if (message.equals(body) && address.equals(number)) {
                    mLogger.logInfo("Deleting SMS with id: " + threadId);
                    context.getContentResolver().delete(
                        Uri.parse("content://sms/" + id), null, null);
                }
            } while (c.moveToNext());
        }
    } catch (Exception e) {
        mLogger.logError("Could not delete SMS from inbox: " + e.getMessage());
    }
}
Larutan

Sebenarnya, kode dalam posting saya 100% benar. Masalahnya adalah Android membutuhkan waktu untuk menyimpan SMS setelah menerimanya. Jadi solusinya adalah dengan menambahkan penangan dan menunda permintaan hapus selama 1 atau 2 detik.

Hal ini sebenarnya menyelesaikan seluruh masalah.

EDIT (terima kasih kepada Maksim Dmitriev):

Harap diperhatikan bahwa Anda tidak dapat menghapus pesan SMS pada perangkat dengan Android 4.4.

Selain itu, sistem sekarang hanya mengizinkan aplikasi default untuk menulis data pesan ke penyedia, meskipun aplikasi lain dapat membaca kapan saja.

http://developer.android.com/about/versions/kitkat.html

Tidak ada pengecualian yang akan dibuang jika Anda mencobanya; tidak ada yang akan dihapus. Saya baru saja mengujinya pada dua emulator.

Cara mengirim pesan SMS secara terprogram

Komentar (2)

hei gunakan kode ini untuk menghapus sms khusus

  1. Berdasarkan tanggal

  2. Berdasarkan nomor

  3. Dengan tubuh

    mencoba { Uri uriSms = Uri.parse("content://sms/inbox"); Cursor c = context.getContentResolver().query( uriSms, new String[] { "_id", "thread_id", "alamat", "orang", "tanggal", "badan" }, "read=0", null, null);

         if (c != null && c.moveToFirst()) {
             do {
                 long id = c.getLong(0);
                 long threadId = c.getLong(1);
                 String alamat = c.getString(2);
                 String badan = c.getString(5);;
                 String tanggal = c.getString(3);
                 Log.e("log>>>",
                         "0--->" + c.getString(0) + "1---->" + c.getString(1)
                                 + "2---->" + c.getString(2) + "3--->"
                                 + c.getString(3) + "4----->" + c.getString(4)
                                 + "5---->" + c.getString(5));
                 Log.e("log>>>", "date" + c.getString(0));
    
                 Nilai-nilai konten = new Nilai-nilaiKonten();
                 values.put("read", true);
                 getContentResolver().update(Uri.parse("content://sms/"),
                         values, "_id=" + id, null);
    
                 if (pesan.equals(body) && alamat.equals(number)) {
                     // mLogger.logInfo("Menghapus SMS dengan id: " + threadId);
                     context.getContentResolver().delete(
                             Uri.parse("content://sms/" + id), "date=?",
                             new String[] { c.getString(4) });
                     Log.e("log>>>", "Keberhasilan penghapusan.........");
                 }
             } while (c.moveToNext());
         }
     } catch (Exception e) {
         Log.e("log>>>", e.toString());
     }
Komentar (3)
private int deleteMessage(Context context, SmsMessage msg) {
    Uri deleteUri = Uri.parse("content://sms");
    int count = 0;
            @SuppressLint("Recycle") Cursor c = context.getContentResolver().query(deleteUri, null, null, null, null);

    while (c.moveToNext()) {
        try {
            // Delete the SMS
            String pid = c.getString(0); // Get id;
            String uri = "content://sms/" + pid;
            count = context.getContentResolver().delete(Uri.parse(uri),
                    null, null);
        } catch (Exception e) {
        }
    }
    return count;
}

gunakan kode ini.............

atau

getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null);
Komentar (1)