Vì vậy, tôi đã có một vở kịch, và nó là có thể xóa một tin nhắn SMS nhận được. Thật không may, đó không phải là tất cả đều thuận buồm xuôi gió :(
Tôi có một bộ thu nhận tin nhắn SMS đến. Giờ đây, cách thức hoạt động của định tuyến SMS đến của Android là đoạn mã chịu trách nhiệm giải mã các tin nhắn sẽ gửi một Broadcast (nó sử dụng sendBroadcast()
phương pháp - tiếc là KHÔNG phải là phiên bản cho phép bạn gọi đơn giản abortBroadcast()
) bất cứ khi nào có tin nhắn đến.
Bộ thu của tôi có thể được gọi hoặc không trước bộ thu SMS của Hệ thống và trong mọi trường hợp, chương trình phát đã nhận không có thuộc tính nào có thể phản ánh _id
cột trong bảng SMS.
Tuy nhiên, không dễ dàng bị dừng lại mà tôi tự đăng cho mình (thông qua Trình xử lý) một tin nhắn bị trì hoãn với SmsMessage làm đối tượng đính kèm. (Tôi cho rằng bạn cũng có thể đăng cho mình một Runnable ...)
handler.sendMessageDelayed(handler.obtainMessage(MSG_DELETE_SMS, msg), 2500);
Sự chậm trễ là có để đảm bảo rằng vào thời điểm tin nhắn đến, tất cả các bộ thu Broadcast sẽ hoàn thành công việc của họ và tin nhắn sẽ được lưu trữ an toàn trong bảng SMS.
Khi nhận được thông báo (hoặc Runnable), đây là những gì tôi làm:
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())});
Tôi sử dụng địa chỉ gốc và trường dấu thời gian để đảm bảo khả năng rất cao là CHỈ xóa thư tôi quan tâm. Nếu tôi muốn hoang tưởng hơn nữa, tôi có thể bao gồm msg.getMessageBody()
nội dung vào như một phần của truy vấn.
Có, tin nhắn đã bị xóa (chúc mừng!). Rất tiếc là thanh thông báo không được cập nhật :(
Khi bạn mở khu vực thông báo, bạn sẽ thấy thông báo ở đó dành cho bạn ... nhưng khi bạn nhấn vào khu vực đó để mở - thông báo đã biến mất!
Đối với tôi, điều này không đủ tốt - tôi muốn tất cả dấu vết của tin nhắn biến mất - Tôi không muốn người dùng nghĩ rằng có TXT khi không có (điều đó sẽ chỉ gây ra báo cáo lỗi).
Trong nội bộ hệ điều hành, các cuộc gọi điện thoại MessagingNotification.updateNewMessageIndicator(Context)
, nhưng tôi lớp đó đã bị ẩn khỏi API và tôi không muốn sao chép tất cả mã đó chỉ vì mục đích làm cho chỉ báo chính xác.