एंड्रॉइड पर अपनी बहुत ही यूआरआई योजना कैसे लागू करें


161

कहो मैं परिभाषित करना चाहता हूं कि एक यूआरआई जैसे:

myapp://path/to/what/i/want?d=This%20is%20a%20test

मेरे अपने आवेदन, या सेवा द्वारा नियंत्रित किया जाना चाहिए। ध्यान दें कि योजना है या "myapp"नहीं "http", या "ftp"। यह ठीक वही है जो मैं चाहता हूं: एंड्रॉइड ओएस के लिए विश्व स्तर पर अपने स्वयं के यूआरआई स्कीमा को परिभाषित करने के लिए। क्या यह संभव है?

यह कुछ हद तक अनुरूप है जो कुछ प्रोग्राम पहले से ही करते हैं, जैसे, विंडोज सिस्टम, जैसे स्काइप ( skype://) या कोई टोरेंट डाउनलोडर प्रोग्राम ( torrent://)।


जवाबों:


215

यह बहुत संभव है; आप <data>तत्व का उपयोग करके अपने AndroidManifest.xml में URI योजना को परिभाषित करते हैं । आप <data>भरे हुए तत्व के साथ एक आशय फ़िल्टर सेट करते हैं, और आप अपनी योजना बना पाएंगे। ( इरादे फिल्टर और इरादे संकल्प पर अधिक यहाँ ।)

यहाँ एक छोटा उदाहरण दिया गया है:

<activity android:name=".MyUriActivity">
    <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="myapp" android:host="path" />
    </intent-filter>
</activity>

कैसे निहित कार्य के अनुसार, आपको कम से कम एक कार्रवाई और एक श्रेणी के रूप में अच्छी तरह से परिभाषित करने की आवश्यकता है; यहां मैंने VIEW को कार्रवाई के रूप में चुना (हालांकि यह कुछ भी हो सकता है), और DEFAULT श्रेणी को जोड़ना सुनिश्चित किया (जैसा कि सभी निहित इरादों के लिए यह आवश्यक है)। यह भी ध्यान दें कि मैंने किस प्रकार BROWSABLE को श्रेणी में शामिल किया है - यह आवश्यक नहीं है, लेकिन यह आपके URI को ब्राउज़र (एक निफ्टी फीचर) से ओपन करने योग्य होने देगा।


11
मुझे यह पता लगाने में थोड़ा समय लगा कि उस विशिष्ट पथ से लिंक करने के लिए जिसे "android: पथ" चर को प्रोटोकॉल के बाद सब कुछ निर्दिष्ट करना होगा, अर्थात। यह फॉर्म "youtube.com/myvideo" का होना चाहिए
केसबश

2
महान काम करता है, लेकिन मैं MyUriActivity से url में दिए गए GET पैरामीटर "d" का मान कैसे पढ़ सकता हूं?
तिमो

मेरे लिए काम नहीं करना मेरे पास एक ही गतिविधि के लिए कई इंटेंट फिल्टर हैं। मुख्य लांचर के लिए एक। दूसरे के रूप में एक विशेष फ़ाइल खोलने के लिए दूसरा ऊपर पहले दो पूरी तरह से काम कर रहे हैं लेकिन तीसरा नहीं।
मोहितम

क्या आप कृपया इस प्रश्न को यहां देख सकते हैं stackoverflow.com/q/29116574/3828908
सलमान

1
उपरोक्त लिंक का अंग्रेजी भाषा संस्करण सिर्फ अगर किसी को इसकी आवश्यकता हो तो।
Zensaburou

67

पूरक @DanielLew जवाब है, तो आप इस parameteres क्या करना है के मूल्यों को प्राप्त करने के लिए:

URI उदाहरण: myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo

आपकी गतिविधि में:

Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
  Uri uri = intent.getData();
  String valueOne = uri.getQueryParameter("keyOne");
  String valueTwo = uri.getQueryParameter("keyTwo");
}

क्या होगा अगर लिंक की तरह है http://www.host.com/directory/value? हम इसे कैसे प्राप्त कर सकते हैं value?
बग्स हैपन

3
कोई बात नहीं, यहाँ एसओ जवाब मिला ।
बग्स हैपन

मेटा डेटा का उपयोग किए बिना कोड में AndroidManifest.xml में डेटा टैग कैसे पढ़ें। मुझे चाहिए कि सटीक योजना, पथ और होस्ट को सर्वर पर भी ओउथ कॉल में भेजें। मैं कॉल बैक घोषणा की नकल नहीं करना चाहता!
प्रदीप चक्रवर्ती गुडीपति

@BugsHappen यह अंतिम URI पथ खंड है। उपयोगuri.getLastPathSegment();
मार्टिन

25

मैं दृढ़ता से अनुशंसा करता हूं कि आप अपनी स्वयं की योजना को परिभाषित न करें। यह यूआरआई योजनाओं के लिए वेब मानकों के खिलाफ जाता है, जो अच्छे कारणों के लिए उन नामों को सख्ती से नियंत्रित करने का प्रयास करता है - विभिन्न संस्थाओं के नाम संघर्ष से बचने के लिए। एक बार जब आप एक वेब साइट पर अपनी योजना का लिंक डालते हैं, तो आपने पूरे इंटरनेट के नामस्थान में उस छोटे नाम को डाल दिया है, और उन मानकों का पालन करना चाहिए।

यदि आप केवल अपने स्वयं के ऐप के लिए लिंक करना चाहते हैं, तो मैं आपको यहां बताए गए दृष्टिकोण का पालन करने की सलाह देता हूं:

एंड्रॉइड ओएस में ब्राउज़र में URL कॉल करके अपने प्रोग्राम तक पहुंचने के लिए कुछ URL नामस्थान (myapp: //app.start/) कैसे पंजीकृत करें?


2
सिर के लिए धन्यवाद, लेकिन मैं इसका उपयोग केवल अवधारणा को साबित करने के लिए बंद वातावरण में करने की कोशिश करूंगा। क्या यह प्रयोग कभी भी अपना परीक्षण चरण छोड़ना चाहिए, मैं निश्चित रूप से पूरे सौदे की पुष्टि करने पर विचार करूंगा।
punnie

5
ठीक है ... लेकिन सिर्फ सही काम क्यों नहीं करते? यह कोई महत्वपूर्ण अधिक काम नहीं है।
18

2
Youtube क्या करता है @hackbod सुझाव दे रहा है, लेकिन facebook से Youtube लिंक खोलने से ब्राउज़र खुलता है न कि Youtube ऐप। क्या यह तंत्र भी "नाजुक" है?
एलिकएल्ज़िन-किलाका

19
मैं अपनी स्वयं की योजना को परिभाषित करने की ओर झुक रहा हूं ताकि मैं अपने iOS ऐप या अपने एंड्रॉइड ऐप को लॉन्च करने के लिए उसी वेब तर्क का उपयोग कर सकूं। बस मेरे 2 सेंट
Chicowitz

1
@hackbod मुझे नहीं लगता कि उनके दिमाग में android था जब उन्होंने लिखा कि rfc। जबकि मैं आपके साथ 100% हूं कि नई योजना बनाना आवश्यक नहीं है , मुझे लगता है कि इसका कारण बिल्कुल यही है: कि लक्ष्य को पूरा करना भी आवश्यक नहीं है। और अब .. जब आप फेसबुक, व्हाट्सएप या अन्य बड़े, स्थापित tec टूल्स की तरह होते हैं - "नया URI- स्कीम न बनाएं" -रुएल आप पर लागू नहीं होता है। योजना के नामों पर कोई टक्कर नहीं होगी जब आपका नाम पहले से ही वैश्विक स्तर पर एक कंपनी से जुड़ा हो।
इक्यासीसोर

6

एक पुस्तकालय का उपयोग करने के लिए डिएगो का एक और वैकल्पिक तरीका है:

https://github.com/airbnb/DeepLinkDispatch

आप आसानी से उन यूआरआई की घोषणा कर सकते हैं जिन्हें आप संभालना चाहते हैं और पैरामीटर जिसे आप गतिविधि पर एनोटेशन के माध्यम से निकालना चाहते हैं, जैसे:

@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
  ...
}

प्लस के रूप में, क्वेरी मापदंडों को गतिविधि के साथ-साथ पास भी किया जाएगा।


1

जैसा कि प्रश्न वर्षों पहले पूछा गया है, और एंड्रॉइड इस यूआरआई योजना पर बहुत विकसित है।
मूल URI योजना से, गहरे लिंक तक, और अब Android App लिंक।

Android अब HTTP URL का उपयोग करने की अनुशंसा करता है, अपनी स्वयं की URI योजना को परिभाषित नहीं करता है। क्योंकि एंड्रॉइड ऐप लिंक HTTP URL का उपयोग करते हैं जो आपके द्वारा वेबसाइट डोमेन से लिंक किया जाता है, इसलिए कोई अन्य ऐप आपके लिंक का उपयोग नहीं कर सकता है। आप गहरे लिंक और एंड्रॉइड ऐप लिंक की तुलना यहां से देख सकते हैं

अब आप आसानी से एंड्रॉइड स्टूडियो विकल्प: उपकरण> ऐप लिंक सहायक का उपयोग करके एक यूआरआई योजना जोड़ सकते हैं। कृपया Android दस्तावेज़ का विवरण देखें: https://developer.android.com/studio/write/app-link-indexing.html

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