क्या कोई मुझे एंड्रॉइड ब्राउज़र से अपना एंड्रॉइड एप्लिकेशन लॉन्च करने के बारे में मार्गदर्शन कर सकता है?
क्या कोई मुझे एंड्रॉइड ब्राउज़र से अपना एंड्रॉइड एप्लिकेशन लॉन्च करने के बारे में मार्गदर्शन कर सकता है?
जवाबों:
<intent-filter>
एक <data>
तत्व के साथ प्रयोग करें । उदाहरण के लिए, twitter.com करने के लिए सभी लिंक प्रबंधित करने के लिए, आप अपने अंदर डाल चाहते हैं <activity>
अपने में AndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
फिर, जब उपयोगकर्ता ब्राउज़र में ट्विटर के लिंक पर क्लिक करता है, तो उनसे पूछा जाएगा कि कार्रवाई को पूरा करने के लिए किस एप्लिकेशन का उपयोग करना है: ब्राउज़र या आपका एप्लिकेशन।
बेशक, यदि आप अपनी वेबसाइट और अपने ऐप के बीच कड़ा एकीकरण प्रदान करना चाहते हैं, तो आप अपनी योजना को परिभाषित कर सकते हैं:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
फिर, अपने वेब ऐप में आप लिंक डाल सकते हैं जैसे:
<a href="my.special.scheme://other/parameters/here">
और जब उपयोगकर्ता इसे क्लिक करता है, तो आपका ऐप स्वचालित रूप से लॉन्च हो जाएगा (क्योंकि यह संभवतः केवल एक ही होगा my.special.scheme://
जो यूरिस के प्रकार को संभाल सकता है )। इसका नकारात्मक पक्ष यह है कि यदि उपयोगकर्ता के पास ऐप इंस्टॉल नहीं है, तो उन्हें एक गंदा त्रुटि मिलेगी। और मुझे यकीन नहीं है कि जाँच करने का कोई तरीका है।
संपादित करें: अपने प्रश्न का उत्तर देने के लिए, आप getIntent().getData()
एक Uri
वस्तु का उपयोग कर सकते हैं । फिर Uri.*
आप अपनी ज़रूरत के डेटा को निकालने के लिए विधियों का उपयोग कर सकते हैं । उदाहरण के लिए, मान लें कि उपयोगकर्ता ने किसी लिंक पर क्लिक किया है http://twitter.com/status/1234
:
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
आप अपने में कहीं भी ऊपर कर सकते हैं Activity
, लेकिन आप शायद इसे अंदर करना चाहते हैं onCreate()
। आप params.size()
पथ सेगमेंट की संख्या प्राप्त करने के लिए भी उपयोग कर सकते हैं Uri
। अन्य Uri
तरीकों के लिए javadoc या Android डेवलपर वेबसाइट देखें, जिनका उपयोग आप विशिष्ट भागों को निकालने के लिए कर सकते हैं।
android:exported="true"
होगा Activity
। इस उत्तर की जाँच करें stackoverflow.com/a/13044911/1276636
उपरोक्त सभी उत्तर मेरे लिए २ answers CHROME
जनवरी २०१४ से काम नहीं कर रहे थे
मेरे ऐप को http://example.com/someresource/ से ठीक से लॉन्च किया गया , जैसे हैंगआउट, जीमेल आदि ऐप से, लेकिन क्रोम ब्राउज़र से नहीं।
इसे हल करने के लिए, ताकि यह CHROME से ठीक से लॉन्च हो जाए, आपको इस तरह का इरादा फ़िल्टर सेट करना होगा
<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:host="example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
<data
android:host="www.example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
</intent-filter>
pathPrefix
तत्व पर ध्यान दें
जब भी उपयोगकर्ता Google खोज परिणामों या किसी अन्य वेबसाइट के लिंक पर क्लिक करके क्रोम ब्राउज़र से http://example.com/someresource/ पैटर्न का अनुरोध करता है, तो आपका ऐप गतिविधि पिकर के अंदर दिखाई देगा।
कृपया मेरी टिप्पणी यहां देखें: एंड्रॉइड ब्राउज़र में एक लिंक बनाएं मेरा ऐप शुरू करें?
हम लोगों को अपनी योजनाओं का उपयोग करने से दृढ़ता से हतोत्साहित करते हैं, जब तक कि वे एक नई विश्वव्यापी इंटरनेट योजना को परिभाषित नहीं कर रहे हैं।
मेरे मामले में मुझे दो श्रेणियों के लिए सेट करना पड़ा <intent-filter>
और फिर इसने काम किया:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
उदाहरण के लिए, आपके पास अगली चीजें हैं:
अपने ऐप को खोलने के लिए एक लिंक: http://example.com
आपके ऐप का पैकेज नाम: com.example.mypackage
फिर आपको आगे क्या करना है:
1) अपनी गतिविधि में एक आशय फ़िल्टर जोड़ें (कोई भी गतिविधि जो आप चाहते हैं। अधिक जानकारी के लिए दस्तावेज़ देखें )।
<activity
android:name=".MainActivity">
<intent-filter android:label="@string/filter_title_view_app_from_web">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://example.com" -->
<data
android:host="example.com"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2) लिंक का परीक्षण करने या इस विधियों का उपयोग करने के लिए एक HTML फ़ाइल बनाएं ।
<a href="intent://example.com#Intent;scheme=http;package=com.example.mypackage;end">Open your Activity directly (just open your Activity, without a choosing dialog). </a>
<a href="http://example.com">Open this link with browser or your programm (by choosing dialog).</a>
3) परीक्षण करने के लिए मोबाइल क्रोम का उपयोग करें
4) यही बात है।
और इसकी कड़ी जोड़ने के लिए बाजार में एप्लिकेशन प्रकाशित करना आवश्यक नहीं है =)
इसके अलावा, अधिक जानकारी के लिए, प्रलेखन और उपयोगी प्रस्तुति की जांच करें ।
<category android:name="android.intent.category.BROWSABLE"/>
लिंक से गतिविधि को ठीक से पहचानने के लिए इरादे फ़िल्टर में भी जोड़ा जाना चाहिए ।
निम्न लिंक सीधे ब्राउज़र से ऐप लॉन्च करने (यदि स्थापित है) की जानकारी देता है। अन्यथा यह सीधे ऐप को प्ले स्टोर में खोल देता है ताकि उपयोगकर्ता मूल रूप से डाउनलोड कर सके।
कृपया ध्यान दें कि जब आप इस सुविधा को लागू करते हैं, तो आपका आइकन एंड्रॉइड लॉन्चर से गायब हो जाता है, जबकि आपको इरादे-फ़िल्टर को विभाजित करना पड़ता है।
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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="your-own-uri" />
</intent-filter>
</activity>
हाँ, Chrome योजना खोजने के बजाय खोज करता है। अगर आप अपने ऐप को URI स्कीम के माध्यम से लॉन्च करना चाहते हैं, तो प्ले स्टोर पर इस कूल यूटिलिटी ऐप का उपयोग करें। इसने मेरा दिन बचा लिया :) https://play.google.com/store/apps/details?id=com.naosim.urlshemhemender
फेलिक्स का ज़मारिन बंदरगाह के जवाब
अपने में MainActivity
, इसे जोड़ें ( डॉक्स: Android.App.IntentFilterAttribute क्लास ):
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin आपके लिए निम्नलिखित जोड़ देगा AndroidManifest.xml
:
<activity
android:label="Something"
android:screenOrientation="portrait"
android:theme="@style/MyTheme"
android:name="blah.MainActivity">
<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="my.special.scheme" />
</intent-filter>
</activity>
और परम प्राप्त करने के लिए ( मैंने मेनकैक्टिविटी के ऑनक्रिएट में परीक्षण किया ):
var data = Intent.Data;
if (data != null)
{
var scheme = data.Scheme;
var host = data.Host;
var args = data.PathSegments;
if (args.Count > 0)
{
var first = args[0];
var second = args[1];
...
}
}
जहां तक मुझे पता है, मेनएक्टिविटी ही नहीं, किसी भी गतिविधि में ऊपर जोड़ा जा सकता है
टिप्पणियाँ:
OnCreate
ऐप की घटना MainLauncher Activity
फिर से निकाल दी जाएगी।<a href="my.special.scheme://host/arg1/arg2">
ऊपर अंतिम स्निपेट मूल्यों में होगा:scheme: my.special.scheme
host: host
args: ["arg1", "arg2"]
first: arg1
second: arg2
अपडेट: यदि एंड्रॉइड आपके ऐप का नया उदाहरण बनाता है, तो आपको android:launchMode="singleTask"
भी जोड़ना चाहिए ।
डीप लिंक्स को हैंडल करने के लिए फेलिक्स का दृष्टिकोण डीप लिंक से निपटने का विशिष्ट तरीका है। मैं आपके गहरे लिंक के रूटिंग और पार्सिंग को संभालने के लिए इस लाइब्रेरी की जाँच करने का सुझाव भी दूंगा:
https://github.com/airbnb/DeepLinkDispatch
आप किसी विशेष डीप लिंक URI के लिए अपनी गतिविधि को पंजीकृत करने के लिए एनोटेशन का उपयोग कर सकते हैं, और यह पथ खंडों को प्राप्त करने, इसे मिलान करने, आदि के सामान्य रिगर्मेल करने के बिना आपके लिए मापदंडों को निकालेगा, आप बस एनोटेट और गतिविधि की तरह कर सकते हैं :
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
अरे मुझे इसका हल मिल गया। मैंने श्रेणी को "डिफ़ॉल्ट" के रूप में सेट नहीं किया था। इसके अलावा मैं आशय डेटा के लिए मुख्य गतिविधि का उपयोग कर रहा था। अब मैं आशय डेटा के लिए एक अलग गतिविधि का उपयोग कर रहा हूं। सहायता के लिए धन्यवाद। :)
आपको CALLBACK_URL ऐप में एक छद्म होस्टनाम जोड़ने की आवश्यकता है: // 'एक URL के रूप में समझ में नहीं आता है और इसे पार्स नहीं किया जा सकता है।
example.php:
<?php
if(!isset($_GET['app_link'])){ ?>
<iframe src="example.php?app_link=YourApp://blabla" style="display:none;" scrolling="no" frameborder="0"></iframe>
<iframe src="example.php?full_link=http://play.google.com/xyz" style="display:none;" scrolling="no" frameborder="0"></iframe>
<?php
}
else { ?>
<script type="text/javascript">
self.window.location = '<?php echo $_GET['app_link'];?>';
window.parent.location.href = '<?php echo $_GET['full_link'];?>';
</script>
<?php
}
यहाँ @JRuns उत्तर देखें । विचार यह है कि अपनी कस्टम स्कीम के साथ html बनाएं और इसे कहीं अपलोड करें। फिर यदि आप अपने html-file पर अपने कस्टम लिंक पर क्लिक करते हैं, तो आप अपने ऐप पर रीडायरेक्ट हो जाएंगे। मैंने इस लेख को Android के लिए उपयोग किया है । लेकिन Name = "MyApp.Mobile.Droid.MainActivity"
अपनी लक्ष्य गतिविधि के लिए पूरा नाम विशेषता सेट करना न भूलें ।
15/06/2019 तक
मैंने जो किया, उसमें url खोलने की सभी चार संभावनाएँ शामिल हैं।
यानी, के साथ http
/ https
और 2 के साथwww
उपसर्ग और 2 बिनाwww
और इसके उपयोग से मेरा ऐप बिना ब्राउज़र और अन्य विकल्प चुनने के लिए स्वचालित रूप से लॉन्च होता है।
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="example.in" />
<data android:scheme="https" android:host="www.example.in" />
<data android:scheme="http" android:host="example.in" />
<data android:scheme="http" android:host="www.example.in" />
</intent-filter>