ฉันได้เล่นและเป็นไปได้ที่จะลบ SMS ที่ได้รับ น่าเสียดายที่ไม่ใช่การเดินเรือธรรมดาทั้งหมด :(
ฉันมีเครื่องรับที่รับข้อความ SMS ที่เข้ามา ตอนนี้วิธีการกำหนดเส้นทางขาเข้าของ Android SMS ทำงานคือส่วนของรหัสที่รับผิดชอบในการถอดรหัสข้อความส่งการออกอากาศ (ใช้sendBroadcast()
วิธีการซึ่งน่าเสียดายที่ไม่ใช่เวอร์ชันที่ให้คุณโทรได้ง่ายๆabortBroadcast()
) เมื่อใดก็ตามที่มีข้อความมาถึง
ผู้รับของฉันอาจถูกเรียกก่อนเครื่องรับ SMS ของระบบหรือไม่ก็ได้และในกรณีใด ๆ การออกอากาศที่ได้รับไม่มีคุณสมบัติที่สามารถแสดง_id
คอลัมน์ในตาราง SMS ได้
อย่างไรก็ตามไม่ใช่คนที่จะหยุดง่ายๆอย่างนั้นฉันโพสต์ข้อความล่าช้าด้วยตัวเอง (ผ่านทาง Handler) โดยมี SmsMessage เป็นวัตถุที่แนบมา (ฉันคิดว่าคุณสามารถโพสต์ Runnable ตัวเองได้เช่นกัน ... )
handler.sendMessageDelayed(handler.obtainMessage(MSG_DELETE_SMS, msg), 2500);
ความล่าช้าอยู่ที่นั่นเพื่อให้แน่ใจว่าเมื่อถึงเวลาที่ข้อความมาถึงเครื่องรับการถ่ายทอดสดทั้งหมดจะดำเนินการเสร็จสิ้นและข้อความจะถูกตรึงไว้อย่างปลอดภัยในตาราง SMS
เมื่อได้รับข้อความ (หรือ Runnable) นี่คือสิ่งที่ฉันทำ:
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())});
ฉันใช้ช่องที่อยู่ต้นทางและการประทับเวลาเพื่อให้แน่ใจว่ามีความเป็นไปได้สูงมากที่จะลบเฉพาะข้อความที่ฉันสนใจหากฉันต้องการหวาดระแวงมากขึ้นฉันสามารถรวมmsg.getMessageBody()
เนื้อหาไว้เป็นส่วนหนึ่งของข้อความค้นหา
ใช่ข้อความถูกลบแล้ว (ไชโย!) ขออภัยที่แถบการแจ้งเตือนไม่ได้รับการอัปเดต :(
เมื่อคุณเปิดพื้นที่แจ้งเตือนคุณจะเห็นข้อความอยู่ตรงนั้นสำหรับคุณ ... แต่เมื่อคุณแตะที่เพื่อเปิด - มันหายไปแล้ว!
สำหรับฉันนี่ยังไม่ดีพอ - ฉันต้องการให้ร่องรอยของข้อความทั้งหมดหายไป - ฉันไม่ต้องการให้ผู้ใช้คิดว่ามี TXT เมื่อไม่มี (ซึ่งจะทำให้เกิดรายงานข้อบกพร่องเท่านั้น)
ภายในระบบปฏิบัติการโทรศัพท์เรียกMessagingNotification.updateNewMessageIndicator(Context)
แต่ฉันซ่อนคลาสนั้นจาก API และฉันไม่ต้องการจำลองรหัสนั้นทั้งหมดเพียงเพื่อทำให้ตัวบ่งชี้ถูกต้อง