2012-03-06 14 views
7

में इंटरप्टिंग लिंक मुझे कोई समस्या है। Iam नीचे कोड का उपयोग करमेरे ऐप

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data android:scheme="http" android:host="twitter.com"/> 
    <data android:scheme="http" android:host="facebook.com"/> 
</intent-filter> 

के रूप में मेरे ऐप्लिकेशन के लिंक बीच में लेकिन समस्या यह है कि मैं क्रम अर्थात मैं जोड़ सकते हैं या रनटाइम पर मेजबान नष्ट कर सकते हैं पर डेटा योजना और मेजबान निर्धारित करने की आवश्यकता है। अतः किसी ने मुझसे डेटा योजना और runtime.I पर मेजबान के मान सेट नीचे दिए गए कोड का उपयोग कर रहा में मदद करें, लेकिन यह काम नहीं कर रहा

IntentFilter filter = new IntentFilter(); 
filter.addAction("android.intent.action.VIEW"); 
filter.addCategory("android.intent.category.DEFAULT"); 
filter.addCategory("android.intent.category.BROWSABLE"); 
filter.addDataScheme("http"); 
filter.addDataAuthority("www.facebook.com", null); 
RecieveBroadcaster receiver = new RecieveBroadcaster(); 
registerReceiver(receiver, filter); 
+0

कोई भी कृपया मेरी मदद कर सकता है – saba

+0

मुझे इसका जवाब मिला है, इसलिए अगर किसी को मदद की ज़रूरत है। ACTION.VIEW एक गतिविधि कार्रवाई है। इसलिए हम इसे प्रसारण रिसीवर के साथ पंजीकृत नहीं कर सकते हैं। चूंकि इरादा-फ़िल्टर रनटाइम पर सेट नहीं किया जा सकता है (प्रसारण रिसीवर के मामले में छोड़कर)। और प्रसारण रिसीवर केवल एंड्रॉइड.intent.action.PHONE_STATE जैसे प्रसारण कार्रवाई को रिवर कर सकता है। तो एक ACTION> VIEW को पंजीकृत करने की अनुमति नहीं है और प्रसारण रिसीवर कभी इसका जवाब नहीं देगा। – saba

उत्तर

4

सच पूछिये तो, स्ट्रिंग ACTION_VIEW करने के लिए इसी सम्मेलन द्वारा एक गतिविधि कार्रवाई है ; तथ्य यह है कि आप इसे अपने संदेश में activity के के intent-filter तत्व में रखते हैं, बनाता है यह एक गतिविधि कार्रवाई करता है! यह प्रणाली आपके आवेदन की तरफ से सुनती है, जो मूल रूप से आप स्वयं को नहीं सुन सकते हैं (नहीं कर सकते)। Context.startActivity() विधि इन Intent एस उत्पन्न करती है।

इरादा संकल्प के नियम वास्तव में निर्धारित करते हैं कि कोई विशेष Intent किसी भी IntentFilter से मेल खाता है या नहीं। गतिविधि के इरादे के लिए, कई मिलान हो सकते हैं, और आमतौर पर "चयनकर्ता" इंटरफ़ेस प्रदर्शित करता है, इसलिए उपयोगकर्ता एक लक्ष्य का चयन कर सकते हैं। startActivity(), sendBroadcast() और startService():

तीन Intent "धाराओं" है कि कभी नहीं पार कर रहे हैं। ये सभी Context में विधियों के माध्यम से शुरू किए गए हैं और प्रत्येक के पास क्रमशः Activity, BroadcastReceiver और Service का विशिष्ट लक्ष्य है। एक BroadcastReceiver घटनाओं आप में रुचि रखते हैं प्राप्त करने के लिए (नहीं ReceiveBroadcaster तुम भी है कि कोड की कोशिश की थी?), और फिर साथ Intent आप चाहते हैं Context.startActivity() का उपयोग

यह स्थापित करने के लिए एक सरल बात है। आप कस्टम एक्शन का भी उपयोग कर सकते हैं, इसलिए आप जानते हैं कि यह रिसीवर द्वारा ट्रिगर किया गया था, न कि उपयोगकर्ता।

एकमात्र प्रश्न यह है: क्या कोई प्रसारण कार्यक्रम है जिसे आप प्राप्त करने की व्यवस्था कर सकते हैं? एक सिस्टम इवेंट हो सकता है जिसके लिए आप पंजीकरण कर सकते हैं, या आप Context.sendBroadcast() के माध्यम से स्वयं एक कस्टम ईवेंट उत्पन्न कर सकते हैं।

याद रखें कि आप आने वाली Intent का निरीक्षण कर सकते हैं, आपकी गतिविधि शुरू हुई थी, और इसे "अग्रेषित" या संशोधित Intent यदि यह ठीक से मेल नहीं खाता है तो आप वास्तव में मेल नहीं खाते हैं। जैसा कि आपने सही ढंग से निर्धारित किया है, आप IntentFilter के गतिविधि के सेट को गतिशील रूप से परिवर्तित नहीं कर सकते हैं, इसलिए आपको प्रत्येक अनुरोध के होस्ट का निरीक्षण करना होगा।

याद रखें कि आप अपने मैनिफेस्ट में रिसीवर भी पंजीकृत कर सकते हैं, और उस कार्यान्वयन को सिस्टम द्वारा स्वचालित रूप से बुलाया गया है।

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