क्या इनबॉक्स में पहुँचने से पहले हम एंड्रॉइड में एक एसएमएस हटा सकते हैं?


100

मैं इनबॉक्स से एक एसएमएस हटा रहा हूं, लेकिन मैं जानना चाहता हूं: इनबॉक्स में पहुंचने से पहले मैं इसे कैसे हटा सकता हूं?


2
क्या j2ee वास्तव में यहाँ मेल खाता है?
जिटर

1
आप Android पर जावा में गलत क्यों नहीं करेंगे?
घबराना

3
इस बुराई के reeks। आपको ऐसा नहीं करना चाहिए।
मैट नोव

43
वैध उपयोग हैं! उदाहरण के लिए यदि आप अपने फोन पर एसएमएस के माध्यम से कुछ करना चाहते हैं (जीपीएस लोकेशन, वाइप या कुछ और भेजें) तो यह चोरी होने की स्थिति में; आप नहीं चाहते कि जो कोई भी उस एसएमएस संदेश को देखने के लिए फोन चुराए।
पॉलीग्लॉट

21
चलो करते हैं! यह निश्चित रूप से "बुराई" नहीं है। @ पॉलीग्लॉट सही है! मैं उपयोगकर्ता की संख्या (Viber के रूप में) की पुष्टि करने के लिए एक आवेदन कर रहा हूं और मुझे इसकी आवश्यकता है। सब कुछ "बुराई" के रूप में इस्तेमाल किया जा सकता है। बुराई ऐप्स इंस्टॉल न करें, बस।
फेलिप

जवाबों:


187

हाँ।

इस सवाल पर कुछ नकारात्मक प्रतिक्रियाओं के बावजूद, एसएमएस अवरोधन के लिए वैध उपयोग हैं। उदाहरण के लिए: फ़ोन नंबर सत्यापन को स्वचालित करना, एसएमएस के माध्यम से जिन सेवाओं का प्रावधान किया गया है (हालांकि आम तौर पर यह डेटा एसएमएस के साथ किया जाना चाहिए), या उन अनुप्रयोगों के लिए जो अन्यथा एक अच्छा एंड्रॉइड में दिखाने के लिए विशेष रूप से स्वरूपित संदेशों को संसाधित करके उपयोगकर्ता के अनुभव में सुधार करते हैं। - विशिष्ट यूआई।

एंड्रॉइड 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


13
हे भगवन। यह सच है! मैंने हमेशा यह मान लिया है कि यह दूसरा रास्ता होगा! प्रमाण के लिए, यहाँ देखें । वाह। काश मैं आपको एक से अधिक
उत्थान

1
@kakopappa: हाँ, जैसा कि उत्तर में उल्लेख किया गया है कि यह एंड्रॉइड 1.6+ से काम करता है।
क्रिस्टोफर ओर

1
@ मेरे पास ऐसे ऐप्स हैं जो प्राथमिकता का उपयोग करते हैं 1000, इसलिए यह संभव है। वास्तव में, Handcent प्राथमिकता का उपयोग कर रहे हैं 2147483647
क्रिस्टोफर ओर्र

2
इसने मेरे लिए काम किया :) मेरी ऐप पहले मैसेज को पकड़ती है और नोटिफिकेशन नहीं है लेकिन फिर एसएमएस इनबॉक्स में नहीं जा रहा है। जैसे यह कभी प्राप्त नहीं हुआ, केवल मेरे ऐप में। क्या गर्भपात प्रसारण का उपयोग करने का एक तरीका है लेकिन संदेशों को इनबॉक्स में प्राप्त करना है?
११:१२

7
नए API स्तर 19 को ध्यान में रखना महत्वपूर्ण है क्योंकि @ChristopherOrr अपने अपडेट में कहता है। वहाँ यह कहता है "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."
GoRoS

11

चरण -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>

बस

उपरोक्त कोड कैसे काम करता है

जैसे कि ब्रॉड कास्ट प्राप्त करने का एसएमएस एक आदेशित प्रसारण होता है, उच्च प्राथमिकता वाले रिसीवर को पहले प्राप्त होगा इसलिए आपका आवेदन पहले प्राप्त होगा और प्राप्त करने के बाद आप प्रसारण को निरस्त कर रहे हैं। इसलिए कोई अन्य एप्लिकेशन इसे प्राप्त नहीं कर सकता है। इसलिए एसएमएस इनबॉक्स में मौजूद नहीं होंगे


क्या हमारे पास एक प्रसारण रिसीवर हो सकता है, जब उपयोगकर्ता संदेश इनबॉक्स दबाता है, ताकि मैं लॉक स्क्रीन विकसित कर
सकूं

9

नीचे ("एंड्रॉइड: प्राथमिकता" और abortBroadcast ()) समाधान एंड्रॉइड मैसेजिंग एप्लिकेशन को डिफ़ॉल्ट रूप में काम करता है (मेरा मतलब स्टॉक एंड्रॉइड मैसेजिंग एप्लिकेशन है)। यदि उपयोगकर्ता "GoSMSPro" या "HandcentSMS" स्थापित करता है, तो ये एप्लिकेशन अभी भी इनबॉक्स में संदेश दिखाते हैं, मेरा मानना ​​है कि यह "एंड्रॉइड: प्राथमिकता" के कारण है। यदि फोन पर थर्ड पार्टी मैसेजिंग एप्लिकेशन इंस्टॉल किए जाते हैं, तो मुझे उपरोक्त समस्या को ठीक करने का कोई बेहतर तरीका नहीं दिख रहा है।


2
अच्छी बात। लेकिन यह एक टिप्पणी होनी चाहिए, एक जवाब नहीं। क्या इसे स्थानांतरित करना संभव है? --- और क्या होगा यदि आप बहुत अधिक मूल्य रखते हैं? Android के रूप में: प्राथमिकता = "9999"? उदाहरण के लिए? क्या आपने कोशिश की है?
फेलिप

4
@FelipeMicaroniLalli वास्तव में GO SMS PRO, आदि ... अपनी प्राथमिकता के लिए 2147483647 का उपयोग करें
rf43

1
@DDoSAttack 2147483647 अधिकतम है?
फेलिप

3
यह सबसे बड़ी अहस्ताक्षरित पूर्णांक है en.wikipedia.org/wiki/Integer_(computer_science) अधिकतम कि एंड्रॉयड का समर्थन करता है है 999. developer.android.com/reference/android/content/...
rf43

2
@ नोमान हमीद यह सही है। 999 अधिकतम प्राथमिकता है। आप जो भी नंबर चुनते हैं उसका उपयोग कर सकते हैं, Android केवल 999 तक की गारंटी देगा। इससे बड़ी कोई चीज नहीं है और यह अस्थिर हो भी सकती है और नहीं भी। निजी तौर पर, मुझे GO SMS PRO जैसे ऐप पर जाने की कोशिश करने के लिए 2147483647 का उपयोग करना पड़ा। कभी-कभी यह उपयोगकर्ताओं के लिए काम करता था और कभी-कभी ऐसा नहीं होता था।
rf43

1
/**
 * 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);
    }
}

प्राथमिकता की जाँच करें और अन्य रिसीवरों की तुलना में उच्च प्राथमिकता (आपके प्रकट में) निर्धारित करें।


0

यदि आपके पास इस तरह का परिदृश्य है और आप इस संपर्क नंबर "+ 44xxxxx" आदि से संबंधित संदेश को हटाना या अनदेखा करना चाहते हैं, तो एसएमएस ब्रॉडकास्ट रिसीवर में इस कोड का उपयोग करें

 if(sender.equalsIgnoreCase("+44xxxxxx")
   this.abortBroadCast();

आपको इसे उच्च प्राथमिकता भी निर्धारित करनी होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.