तो, मैं एक नाटक था, और यह है एक प्राप्त एसएमएस हटाना संभव। दुर्भाग्य से यह सभी सादे नौकायन नहीं है :(
मेरे पास एक रिसीवर है जो आने वाले एसएमएस संदेशों को उठाता है। अब जिस तरह से एंड्रॉइड एसएमएस आने वाले राउटिंग काम करता है वह यह है कि संदेशों को डिकोड करने के लिए जिम्मेदार कोड का टुकड़ा एक ब्रॉडकास्ट भेजता है (यह sendBroadcast()
विधि का उपयोग करता है - जो दुर्भाग्य से वह संस्करण नहीं है जो आपको बस कॉल करता है abortBroadcast()
) जब भी कोई संदेश आता है।
सिस्टम रिसीवर के रिसीवर से पहले मेरे रिसीवर को कॉल किया जा सकता है या नहीं किया जा सकता है, और किसी भी मामले में प्राप्त प्रसारण में कोई संपत्ति नहीं है जो _id
एसएमएस तालिका में कॉलम को प्रतिबिंबित कर सकती है ।
हालांकि, एक को रोका नहीं जा रहा है कि मैं आसानी से खुद को (एक हैंडलर के माध्यम से) SmsMessage के साथ संलग्न वस्तु के रूप में एक विलंबित संदेश पोस्ट करता हूं। (मुझे लगता है कि आप अपने आप को एक चलाने योग्य भी पोस्ट कर सकते हैं ...)
handler.sendMessageDelayed(handler.obtainMessage(MSG_DELETE_SMS, msg), 2500);
यह सुनिश्चित करने में देरी हो रही है कि जब तक संदेश पहुंचता है तब तक सभी ब्रॉडकास्ट रिसीवर अपने सामान को समाप्त कर चुके होंगे और एसएमएस तालिका में संदेश सुरक्षित रूप से सुनिश्चित किया जाएगा।
जब संदेश (या 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)
, लेकिन मुझे वह वर्ग एपीआई से छिपाया गया है, और मैं संकेतक को सटीक बनाने के लिए उस कोड के सभी को दोहराना नहीं चाहता था।