Jadi, saya harus bermain, dan itu adalah mungkin untuk menghapus SMS yang diterima. Sayangnya tidak semuanya lancar :(
Saya memiliki penerima yang menangkap pesan SMS yang masuk. Sekarang cara kerja perutean masuk SMS Android adalah bahwa bagian kode yang bertanggung jawab untuk mendekode pesan mengirim Siaran (ini menggunakan sendBroadcast()
metode - yang sayangnya BUKAN versi yang memungkinkan Anda menelepon abortBroadcast()
) setiap kali pesan masuk.
Penerima saya mungkin atau mungkin tidak dipanggil sebelum penerima SMS Sistem, dan bagaimanapun juga siaran yang diterima tidak memiliki properti yang dapat mencerminkan _id
kolom di tabel SMS.
Namun, tidak menjadi orang yang harus dihentikan semudah itu saya memposting sendiri (melalui Handler) pesan tertunda dengan SmsMessage sebagai objek terlampir. (Saya kira Anda bisa memposting sendiri Runnable juga ...)
handler.sendMessageDelayed(handler.obtainMessage(MSG_DELETE_SMS, msg), 2500);
Penundaan ada untuk memastikan bahwa pada saat pesan tiba, semua penerima siaran telah menyelesaikan barang mereka dan pesan akan disimpan dengan aman di tabel SMS.
Saat pesan (atau Runnable) diterima, inilah yang saya lakukan:
case MSG_DELETE_SMS:
Uri deleteUri = Uri.parse("content://sms");
SmsMessage msg = (SmsMessage)message.obj;
getContentResolver().delete(deleteUri, "address=? and date=?", new String[] {msg.getOriginatingAddress(), String.valueOf(msg.getTimestampMillis())});
Saya menggunakan alamat asal dan bidang cap waktu untuk memastikan kemungkinan yang sangat tinggi untuk menghapus HANYA pesan yang saya minati. Jika saya ingin lebih paranoid, saya dapat menyertakan msg.getMessageBody()
konten sebagai bagian dari kueri.
Ya, pesan IS dihapus (hore!). Sayangnya bilah notifikasi tidak diperbarui :(
Saat Anda membuka area notifikasi, Anda akan melihat pesan yang ada di sana untuk Anda ... tetapi ketika Anda mengetuknya untuk membukanya - pesan itu hilang!
Bagi saya, ini tidak cukup baik - Saya ingin semua jejak pesan menghilang - Saya tidak ingin pengguna berpikir ada TXT ketika tidak ada (itu hanya akan menyebabkan laporan bug).
Secara internal di OS panggilan telepon MessagingNotification.updateNewMessageIndicator(Context)
, tetapi saya kelas itu telah disembunyikan dari API, dan saya tidak ingin mereplikasi semua kode itu hanya demi membuat indikator akurat.