मैं इनबॉक्स से एक एसएमएस हटा रहा हूं, लेकिन मैं जानना चाहता हूं: इनबॉक्स में पहुंचने से पहले मैं इसे कैसे हटा सकता हूं?
मैं इनबॉक्स से एक एसएमएस हटा रहा हूं, लेकिन मैं जानना चाहता हूं: इनबॉक्स में पहुंचने से पहले मैं इसे कैसे हटा सकता हूं?
जवाबों:
हाँ।
इस सवाल पर कुछ नकारात्मक प्रतिक्रियाओं के बावजूद, एसएमएस अवरोधन के लिए वैध उपयोग हैं। उदाहरण के लिए: फ़ोन नंबर सत्यापन को स्वचालित करना, एसएमएस के माध्यम से जिन सेवाओं का प्रावधान किया गया है (हालांकि आम तौर पर यह डेटा एसएमएस के साथ किया जाना चाहिए), या उन अनुप्रयोगों के लिए जो अन्यथा एक अच्छा एंड्रॉइड में दिखाने के लिए विशेष रूप से स्वरूपित संदेशों को संसाधित करके उपयोगकर्ता के अनुभव में सुधार करते हैं। - विशिष्ट यूआई।
एंड्रॉइड 1.6 के रूप में, आने वाले एसएमएस संदेश प्रसारण ( android.provider.Telephony.SMS_RECEIVED
) को " ऑर्डर किए गए प्रसारण " के रूप में वितरित किया जाता है - जिसका अर्थ है कि आप सिस्टम को बता सकते हैं कि कौन से घटकों को पहले प्रसारण प्राप्त करना चाहिए।
यदि आप android:priority
अपने एसएमएस-सुनने पर एक विशेषता को परिभाषित करते हैं <intent-filter>
, तो आप मूल एसएमएस आवेदन से पहले अधिसूचना प्राप्त करेंगे।
इस बिंदु पर, आप प्रसारण को रद्द कर सकते हैं , इसे अन्य ऐप्स के प्रचार से रोका जा सकता है।
अद्यतन (अक्टूबर 2013): जब एंड्रॉइड 4.4 आता है, तो यह एसएमएस एपीआई में परिवर्तन करेगा जो एसएमएस वितरण को प्रभावित करने के लिए ऐप की क्षमता को प्रभावित कर सकता है।
कुछ और जानकारी के लिए इस Android डेवलपर्स ब्लॉग पोस्ट को देखें :
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
1000
, इसलिए यह संभव है। वास्तव में, Handcent प्राथमिकता का उपयोग कर रहे हैं 2147483647
।
"Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it."
।
चरण -1: एसएमएस प्राप्त करने के लिए अपना कस्टम प्रसारण रिसीवर बनाएं। ब्रॉड को निरस्त करने के लिए तर्क लिखें ताकि संदेश आपके इनबॉक्स में उपलब्ध न हो
public class SMSReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
if(conditionMatches){
abortBroadcast();
}
}
}
स्टेप -2 रजिस्टर प्रसारण रिसीवर को एंडरिडमैनफेस्ट में डालें और एंड्रॉइड डालें: प्राथमिकता एक बड़ी संख्या
<receiver android:name=".SMSReceiver" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
बस
उपरोक्त कोड कैसे काम करता है
जैसे कि ब्रॉड कास्ट प्राप्त करने का एसएमएस एक आदेशित प्रसारण होता है, उच्च प्राथमिकता वाले रिसीवर को पहले प्राप्त होगा इसलिए आपका आवेदन पहले प्राप्त होगा और प्राप्त करने के बाद आप प्रसारण को निरस्त कर रहे हैं। इसलिए कोई अन्य एप्लिकेशन इसे प्राप्त नहीं कर सकता है। इसलिए एसएमएस इनबॉक्स में मौजूद नहीं होंगे
नीचे ("एंड्रॉइड: प्राथमिकता" और abortBroadcast ()) समाधान एंड्रॉइड मैसेजिंग एप्लिकेशन को डिफ़ॉल्ट रूप में काम करता है (मेरा मतलब स्टॉक एंड्रॉइड मैसेजिंग एप्लिकेशन है)। यदि उपयोगकर्ता "GoSMSPro" या "HandcentSMS" स्थापित करता है, तो ये एप्लिकेशन अभी भी इनबॉक्स में संदेश दिखाते हैं, मेरा मानना है कि यह "एंड्रॉइड: प्राथमिकता" के कारण है। यदि फोन पर थर्ड पार्टी मैसेजिंग एप्लिकेशन इंस्टॉल किए जाते हैं, तो मुझे उपरोक्त समस्या को ठीक करने का कोई बेहतर तरीका नहीं दिख रहा है।
/**
* Check priority
* @param activity
*/
public static void receiverPriority(Activity activity){
Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED");
List<ResolveInfo> infos = activity.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0);
for (ResolveInfo info : infos) {
System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority);
}
}
प्राथमिकता की जाँच करें और अन्य रिसीवरों की तुलना में उच्च प्राथमिकता (आपके प्रकट में) निर्धारित करें।
यदि आपके पास इस तरह का परिदृश्य है और आप इस संपर्क नंबर "+ 44xxxxx" आदि से संबंधित संदेश को हटाना या अनदेखा करना चाहते हैं, तो एसएमएस ब्रॉडकास्ट रिसीवर में इस कोड का उपयोग करें
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
आपको इसे उच्च प्राथमिकता भी निर्धारित करनी होगी।