Di ponsel Android, pesan SMS yang terdaftar ke aplikasi juga dikirim ke kotak masuk perangkat. Namun untuk mencegah kekacauan, alangkah baiknya jika dapat menghapus pesan SMS khusus aplikasi dari kotak masuk untuk mengurangi potensi meluapnya pesan tersebut.
Pertanyaan di grup Google lainnya tentang mendapatkan jawaban pasti tentang cara terprogram untuk menghapus pesan SMS dari kotak masuk Android tampaknya tidak mendesak.
Jadi skenarionya:
- Memulai Aplikasi Android.
- mendaftarkan pesan SMS jenis X, Y dan Z
- Pesan P, Q, X, Y, Z mengalir seiring waktu, semua disimpan di kotak masuk
- Aplikasi Android mendeteksi penerimaan X, Y, Z (mungkin sebagai bagian dari acara interupsi program)
- proses X, Y, Z
- Keinginan !!! X, Y, Z dihapus dari kotak masuk Android
Apakah sudah dilakukan? Bisakah itu dilakukan?
Jawaban:
"Pada Android 1.6, siaran pesan SMS masuk (
android.provider.Telephony.SMS_RECEIVED
) dikirim sebagai" siaran yang dipesan "- artinya Anda dapat memberi tahu sistem komponen mana yang harus menerima siaran terlebih dahulu."Ini berarti Anda dapat mencegat pesan masuk dan membatalkan penyiarannya lebih lanjut.
Di
AndroidManifest.xml
file Anda , pastikan untuk menetapkan prioritas ke tertinggi:Dalam Anda
BroadcastReceiver
, dionReceive()
metode, sebelum melakukan apa-apa dengan pesan Anda, cukup hubungiabortBroadcast();
EDIT: Pada KitKat, tampaknya ini tidak berfungsi lagi.
EDIT2: Info lebih lanjut tentang cara melakukannya di KitKat di sini:
Hapus SMS dari android di 4.4.4 (Baris yang terpengaruh = 0 (Nol), setelah dihapus)
sumber
Dengan menggunakan saran dari orang lain, saya rasa saya berhasil:
(menggunakan SDK v1 R2)
Itu tidak sempurna, karena saya perlu menghapus seluruh percakapan, tetapi untuk tujuan kami, ini adalah kompromi yang cukup karena setidaknya kami akan tahu semua pesan akan dilihat dan diverifikasi. Alur kita mungkin perlu mendengarkan pesan, menangkap pesan yang kita inginkan, melakukan kueri untuk mendapatkan thread_id dari pesan yang baru-baru ini masuk dan melakukan panggilan delete ().
Dalam Aktivitas kami:
Catatan: Saya tidak dapat menghapus konten: // sms / inbox / atau konten: // sms / all /
Sepertinya utas diutamakan, dan itu masuk akal, tetapi pesan kesalahan hanya membuat saya semakin berani. Saat mencoba menghapus pada sms / inbox / atau sms / all /, Anda mungkin akan mendapatkan:
Untuk referensi tambahan juga, pastikan untuk memasukkan ini ke dalam manifes untuk penerima maksud Anda:
Perhatikan bahwa tag penerima tidak terlihat seperti ini:
Ketika saya memiliki pengaturan itu, android memberi saya beberapa pengecualian izin gila yang tidak memungkinkan android.phone menyerahkan SMS yang diterima ke maksud saya. Jadi, JANGAN letakkan atribut izin RECEIVE_SMS itu dalam maksud Anda! Mudah-mudahan seseorang yang lebih bijaksana dari saya dapat memberi tahu saya mengapa hal itu terjadi.
sumber
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 meneleponabortBroadcast()
) 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 ...)
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:
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.sumber
gunakan izin ini di AndroidManifiest
sumber
Lebih baik menggunakan _id dan thread_id untuk menghapus pesan.
Thread_id adalah sesuatu yang ditugaskan ke pesan yang datang dari pengguna yang sama. Jadi, jika Anda hanya menggunakan thread_id, semua pesan dari pengirim akan dihapus.
Jika Anda menggunakan kombinasi _id, thread_id, maka itu akan menghapus pesan yang ingin Anda hapus.
sumber
Anda harus menemukan URI pesan tersebut. Tapi begitu Anda melakukannya, saya pikir Anda harus bisa ke android.content.ContentResolver.delete (...) itu.
Berikut info selengkapnya .
sumber
Saya pikir ini tidak dapat dilakukan dengan sempurna untuk saat ini. Ada 2 masalah dasar:
Bagaimana cara memastikan sms sudah ada di kotak masuk saat Anda mencoba menghapusnya?
Perhatikan bahwa SMS_RECEIVED bukanlah siaran yang dipesan.
Jadi solusi dmyung benar-benar mencoba keberuntungan; bahkan keterlambatan jawaban Doug bukanlah jaminan.
SmsProvider tidak thread safe. (Lihat http://code.google.com/p/android/issues/detail?id=2916#c0 )
Fakta bahwa lebih dari satu klien meminta penghapusan dan sisipkan di dalamnya di waktu yang sama akan menyebabkan kerusakan data atau bahkan Pengecualian Runtime langsung.
sumber
Saya tidak bisa membuatnya berfungsi menggunakan solusi dmyung, itu memberi saya pengecualian saat mendapatkan id pesan atau id utas.
Pada akhirnya, saya telah menggunakan metode berikut untuk mendapatkan id utas:
Lalu saya bisa menghapusnya. Namun, seperti yang dikatakan Doug, notifikasi tersebut tetap ada, bahkan pesan tersebut ditampilkan saat membuka panel notifikasi. Hanya ketika mengetuk pesan saya benar-benar dapat melihat bahwa itu kosong.
Jadi saya kira satu-satunya cara ini akan bekerja adalah dengan benar-benar mencegat SMS sebelum dikirim ke sistem, bahkan sebelum mencapai kotak masuk. Namun, saya sangat meragukan ini bisa dilakukan. Harap perbaiki saya jika saya salah.
sumber
Gunakan fungsi ini untuk menghapus utas pesan tertentu atau memodifikasi sesuai kebutuhan Anda:
Panggil fungsi ini di bawah ini:
Jangan lupa tambahkan izin mainfest android di bawah ini:
sumber
Matikan saja notifikasi untuk aplikasi sms default. Proses notifikasi Anda sendiri untuk semua pesan teks!
sumber
Lihat saja tautan ini, ini akan memberi Anda gambaran singkat tentang logikanya:
https://gist.github.com/5178e798d9a00cac4ddb
Panggil saja fungsi deleteSMS () dengan beberapa penundaan, karena ada sedikit perbedaan antara waktu pemberitahuan dan kapan disimpan sebenarnya ...., untuk lebih jelasnya lihat tautan ini juga ..........
http://htmlcoderhelper.com/how-to-delete-sms-from- inbox-in-android-programmatically /
Terima kasih ..........
sumber
Anda cukup mencoba kode berikut. Ini akan menghapus semua sms yang ada di telepon (Diterima atau Terkirim)
sumber
Juga perbarui file manifes untuk menghapus sms yang Anda butuhkan izin menulis.
sumber
Sekarang
abortBroadcast();
metode dapat digunakan untuk membatasi pesan masuk untuk masuk ke kotak masuk.sumber
Contoh untuk menghapus satu SMS, bukan percakapan:
sumber
sumber
Coba ini saya 100% yakin ini akan berfungsi dengan baik: - // cukup taruh alamat konversi di sini untuk menghapus seluruh konversi berdasarkan alamat (jangan lupa menambahkan izin baca, tulis di mainfest) Berikut adalah Kode:
sumber
Gunakan salah satu metode ini untuk memilih SMS yang terakhir diterima dan menghapusnya, di sini dalam hal ini saya mendapatkan sms paling banyak dan akan menghapus menggunakan utas dan nilai id dari sms,
sumber