2011-03-04 19 views
6

मैं क्या चाहता हूं: मैं एसएमएस प्रसारण प्राप्त करने वाला पहला व्यक्ति बनना चाहता हूं और अगर मैं केवल अपनी रूचि का एसएमएस हूं, तो प्रसारण प्रसार रद्द करना चाहता हूं, ताकि प्रसारण किसी अन्य ऐप/रिसीवर तक नहीं पहुंच सके (डिफ़ॉल्ट संदेश एप्लिकेशन आदि)। क्या मुझे पता है:प्रसारण रद्द करना/रद्द करना

  • SmsDisptacher.java orderedBroadcasts जा सकता है कि गर्भपात रद्द कर सकते हैं कर सकते हैं/उपयोग करता है।

क्या मैं नहीं जानता है:

  • orderedBrodcasts अन्य एप्लिकेशन के लिए रद्द किया जा सकता है, तो/रिसीवर खुद के अलावा अन्य अर्थात।

क्या मैं पहली बार किया जा रहा प्रसारण प्राप्त करने के लिए प्रयास किया है:

  • आशय फिल्टर एंड्रॉयड: प्राथमिकता = "1000"

क्या मैं प्रसारण पहले से ही रद्द करने के लिए प्रयास किया है:

  • AbortBroadcast();
  • broadcastReceiver.setResultCode (RESULT_CANCELED)
  • clearAbortBroadcast()

उत्तर

0

मेरा उत्तर http://groups.google.com/group/android-developers/browse_thread/thread/78fecbc156f4a1ea इसकी संभव नहीं मिला है।

+0

आपके प्रश्न में वर्णित विधि का उपयोग करके यह संभव है। क्या आपको अपने मैनिफेस्ट में सही अनुमतियां सेट करने के लिए याद आया है? यह पता लगाने के लिए कि आपका सिस्टम इनकमिंग एसएमएस पंजीकृत करता है और यह पता लगाने के लिए कि आपका रिसीवर इसे क्यों रोकता है, अपने लॉगकट आउटपुट पर नज़र डालें। – Marmoy

+0

मैंने – Marmoy

1

यह है कि ऐसा करने के लिए संभव है, मैं एक ट्यूटोरियल यह जाँच की थी कृपया here और here सिर्फ पदानुक्रम

11

यह निश्चित रूप से संभव है की चोटी पर प्रसारण गर्भपात। इस तरह अपने मेनिफ़ेस्ट में अपने रिसीवर रजिस्टर:

<receiver android:name=".SmsReceiver"> 
    <intent-filter android:priority="1000"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver> 

अपने रिसीवर के onReceive विधि लिखने में:

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
:

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(SMS_RECEIVED)) { 
     //do your stuff 
     abortBroadcast(); 
    } 
} 

इस तरह प्रकट में एसएमएस संदेश प्राप्त करने की अनुमति सेट करना न भूलें

सही अनुमति सेट के बिना यह निम्नलिखित लॉगकट संदेश के साथ चुपचाप विफल हो जाएगा:

07-13 12:54:13.208: WARN/ActivityManager(201): Permission Denial: receiving Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } to com.mypackage requires android.permission.RECEIVE_SMS due to sender com.android.phone (uid 1001) 

अंत में, यह संभव है कि एक अन्य एप्लिकेशन ने आपके से अधिक प्राथमिकता वाले रिसीवर को पंजीकृत किया हो, और इसलिए इसे रद्द करने से पहले प्रसारण प्राप्त होता है। तो यदि सब कुछ विफल हो जाता है, तो उच्च प्राथमिकता मानों के साथ प्रयोग करने का प्रयास करें।

+0

को स्पष्ट करने के लिए एक पूर्ण उत्तर सबमिट किया है यदि मैं manifestfile को स्पर्श नहीं करना चाहता हूं ....क्या रजिस्टररसीवर (एसएमएससेन्ट रिसीवर, नया इंटेंटफिल्टर (TAG_SENT)) की विधि है; "हमेशा काम कर रहा है? @Videre – gumuruh

+0

@gumuruh मैं उम्मीद करता हूं कि रिटेवर को Context.registerReceiver के साथ रनटाइम के दौरान पंजीकृत करना केवल तब तक प्रसारण का स्वागत सुनिश्चित करता है जब तक एप्लिकेशन चल रहा है इसका मतलब यह है कि एक संदेश प्राप्त होने पर सिस्टम द्वारा 'सो' एप्लिकेशन को जागृत नहीं किया जाएगा, जब तक कि यह मैनिफेस्ट में पंजीकृत न हो। कोई गलत होने पर मुझे सही करें। – Marmoy

+0

ठीक है। मुझे यह पहले से मिला है। @Videre – gumuruh

संबंधित मुद्दे