Yani, bir oyun vardı ve olan bir alınan SMS silmek mümkün. Maalesef tamamen düz yelken değil :(
Gelen SMS mesajlarını alan bir alıcım var. Artık Android SMS gelen yönlendirmesinin çalışma şekli, mesajların kodunu çözmekten sorumlu olan kod parçasının bir mesaj geldiğinde bir Yayın göndermesidir (bu sendBroadcast()yöntemi kullanır - maalesef basitçe aramanıza izin veren sürüm DEĞİLDİR abortBroadcast()).
Alıcım, Sistemlerin SMS alıcısından önce aranabilir veya aranmayabilir ve her durumda alınan yayının, _idSMS tablosundaki sütunu yansıtabilecek hiçbir özelliği yoktur .
Ancak, bu kadar kolay durdurulacak biri olmamakla birlikte kendime (bir İşleyici aracılığıyla) SmsMessage'ın ekli nesne olduğu gecikmiş bir mesaj gönderiyorum. (Sanırım kendine de Runnable koyabilirsin ...)
handler.sendMessageDelayed(handler.obtainMessage(MSG_DELETE_SMS, msg), 2500);
Gecikme, mesaj geldiğinde tüm Yayın alıcılarının işlerini bitirmesini ve mesajın SMS tablosuna güvenli bir şekilde yerleştirilmesini sağlamak içindir.
Mesaj (veya Runnable) alındığında burada yaptığım şey:
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())});
YALNIZCA ilgilendiğim mesajı silme olasılığının çok yüksek olmasını sağlamak için kaynak adresi ve zaman damgası alanını kullanıyorum. Daha da paranoyak olmak istersem, msg.getMessageBody()içeriği sorgunun bir parçası olarak ekleyebilirim .
Evet, mesaj silinmiştir (yaşasın!). Maalesef bildirim çubuğu güncellenmedi :(
Bildirim alanını açtığınızda, orada sizin için oturan mesajı göreceksiniz ... ama açmak için üzerine dokunduğunuzda - gitti!
Bana göre bu yeterince iyi değil - mesajın tüm izinin kaybolmasını istiyorum - yokken kullanıcının TXT olduğunu düşünmesini istemiyorum (bu sadece hata raporlarına neden olur).
İşletim sisteminde dahili olarak telefon arar MessagingNotification.updateNewMessageIndicator(Context), ancak ben bu sınıf API'den gizlendi ve sadece göstergeyi doğru yapmak adına bu kodun tamamını kopyalamak istemedim.