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, _id
SMS 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.