Чи може хто-небудь просити мене про те, як запустити мою програму для Android із браузера Android?
Чи може хто-небудь просити мене про те, як запустити мою програму для Android із браузера Android?
Відповіді:
Використовуйте елемент <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
. Перегляньте javadoc або веб-сайт для розробників android для інших Uri
методів, які можна використовувати для вилучення конкретних деталей.
android:exported="true"
їх Activity
до маніфесту. Перевірте цю відповідь stackoverflow.com/a/13044911/1276636
Усі вищезазначені відповіді не працювали для мене CHROME
станом на 28 січня 2014 року
мій додаток запустився належним чином із http://example.com/someresource/ посилань із таких додатків, як відеокімнати, gmail тощо, але не з хромового браузера.
щоб вирішити це, щоб він запускався належним чином із 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
елемент
ваш додаток тепер з’явиться в засобі вибору активності щоразу, коли користувач запитає http://example.com/someresource/ шаблон із хромового браузера, натиснувши посилання з результатів пошуку Google або будь-якого іншого веб-сайту
Будь ласка, дивіться мій коментар тут: Зробіть посилання в браузері Android, щоб запустити додаток?
Ми рішуче заважаємо людям використовувати власні схеми, якщо вони не визначають нову світову схему Інтернету.
У моєму випадку мені довелося встановити дві категорії для, <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) Використовуйте мобільний Chrome для тестування
4) Це все.
І не потрібно публікувати додаток на ринку, щоб перевірити глибоке посилання =)
Також для отримання додаткової інформації перевірте документацію та корисну презентацію .
Також слід <category android:name="android.intent.category.BROWSABLE"/>
додати у фільтр намірів, щоб активність розпізнавалася належним чином за посиланням.
Наступне посилання містить інформацію про запуск програми (якщо вона встановлена) безпосередньо з браузера. В іншому випадку він безпосередньо відкриває додаток у магазині ігор, щоб користувач міг безперешкодно завантажувати.
Зверніть увагу, якщо ваш значок зникне з запуску Android, коли ви реалізуєте цю функцію, ніж вам потрібно розділити фільтр намірів.
<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, використовуйте цей класний утилітний додаток у магазині Play. Це врятувало мені день :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
Xamarin порт Фелікса відповідь «пд.ш.
У свій MainActivity
додайте це ( документи: Android.App.IntentFilterAttribute Class ):
....
[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>
А щоб отримати парами ( я тестувався в OnCreate of MainActivity ):
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];
...
}
}
Наскільки мені відомо, вище можна додати будь-яку діяльність, не тільки MainActivity
Примітки:
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 створює новий екземпляр вашої програми, ви також повинні додати 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-файлі, ви будете перенаправлені на ваш додаток. Я використав цю статтю для андроїд. Але не забудьте встановити 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>