2009-10-22 10 views
99

मैं अपने ऐप को एक लिंक खोलने के लिए संकेत देना चाहता हूं जब उपयोगकर्ता ब्राउज़र को खोलने की बजाय किसी दिए गए पैटर्न के यूआरएल पर क्लिक करता है। यह तब हो सकता है जब उपयोगकर्ता ब्राउज़र में या किसी ईमेल क्लाइंट में या वेब-व्यू के भीतर एक वेब-पेज पर ताज़ा-minted ऐप में हो।ब्राउज़र से मेरे एंड्रॉइड ऐप को खोलने के लिए लिंक को अवरुद्ध करना

उदाहरण के लिए, फोन में कहीं से भी YouTube लिंक पर क्लिक करें और आपको YouTube ऐप खोलने का मौका दिया जाएगा।

मैं इसे अपने ऐप के लिए कैसे प्राप्त करूं?

उत्तर

136

श्रेणी android.intent.category.BROWSABLE की एक android.intent.action.VIEW का उपयोग करें।

से रोमेन लड़का के Photostream एप्लिकेशन की AndroidManifest.xml,

<activity 
     android:name=".PhotostreamActivity" 
     android:label="@string/application_name"> 

     <!-- ... -->    

     <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="flickr.com" 
        android:pathPrefix="/photos/" /> 
      <data android:scheme="http" 
        android:host="www.flickr.com" 
        android:pathPrefix="/photos/" /> 
     </intent-filter> 
    </activity> 

एक बार अंदर आप activity में हैं, तो आप कार्रवाई के लिए देखो, और फिर आपने जो URL सौंप दिया गया है साथ में कुछ करने की जरूरत है। Intent.getData() विधि आपको उरी देता है।

final Intent intent = getIntent(); 
    final String action = intent.getAction(); 

    if (Intent.ACTION_VIEW.equals(action)) { 
     final List<String> segments = intent.getData().getPathSegments(); 
     if (segments.size() > 1) { 
      mUsername = segments.get(1); 
     } 
    } 

ऐसा लगता है, तथापि, कि इस एप्लिकेशन की तारीख (1.2) से बाहर एक छोटा सा हो रही है, तो आप इस को प्राप्त करने का बेहतर तरीके हैं मिल सकता है।

+8

एक बात - अपने उपयोगकर्ता के बाद से तुम सब तुम्हारा एक हैंडलर के रूप में एप्लिकेशन रजिस्टर करने के लिए है उपयुक्त एप्लिकेशन का उपयोग करने के विकल्प के साथ प्रस्तुत किया जाएगा। व्यक्तिगत रूप से (उपयोगकर्ता के रूप में) मैं इससे नाराज हूं हालांकि मुझे एहसास है कि मैं "डिफ़ॉल्ट कार्रवाई" चुन सकता हूं – Bostone

+1

यह एचटीसी फोन के लिए काम नहीं करता है। मैं इसे एचटीसी फोन पर कैसे काम कर सकता हूं? – user484691

+57

यदि आप querystring सहित पूर्ण यूआरएल की परवाह करते हैं तो आप getData() के बजाय intent.getDataString() का उपयोग करना चाहेंगे। यह टिप्पणी आपको उस समय बचाएगी जो मुझे बस खर्च करती है ..... :-( –

0
private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     setUrlparams(url); 

     if (url.indexOf("pattern") != -1) { 
      // do something 
      return false; 
     } else { 
      view.loadUrl(url); 
     } 

     return true; 
    } 

} 
+4

धन्यवाद के उपयोग की व्याख्या कर सकते हैं। यह उस संदर्भ में उपयोगी है जहां आप वेबव्यू के स्वामी हैं। सवाल मैं पूछ रहा था कि मैं अपना ऐप कैसे प्राप्त करूं किसी ऐप में किसी लिंक पर क्लिक को अवरुद्ध करने के लिए (उदा। ब्राउज़र)। – jamesh

2

कुछ पुस्तकालय स्वचालित रूप से यूआरएल से पार्स पैरामीटर हैं।

ऐसे

रूप

https://github.com/airbnb/DeepLinkDispatch

& &

https://github.com/mzule/ActivityRouter

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

उदाहरण के बारे में पता होना करने के लिए

@Router(value = "main/:id" intExtra = "id") 
... 
int id = getIntent().getInt("id", 0); 
संबंधित मुद्दे