Хост схемы не работает на android lollipop, нажмите на ссылку, чтобы открыть приложение

Я использую этот кусок кода для запуска своего приложения из ссылки.

<activity android:name="com.example.myApp.myClass" android:label="@string/app_name" > <intent-filter> <data android:host="customHostName" android:scheme="customScheme" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

Это ссылка href, я хочу получить ключ в конце.

 customScheme://customHost/49FYTJTF00 

Он отлично работает на всех предыдущих версиях Android, но не работает на Lollipop.
Когда я нажимаю ссылку, она показывает только список браузеров для запуска.

Что мне делать?

Solutions Collecting From Web of "Хост схемы не работает на android lollipop, нажмите на ссылку, чтобы открыть приложение"

Редактировать:

После тестирования и тестирования я обнаружил, что если ваша схема содержит символ верхнего регистра, браузер не сможет ее запустить. Ваша схема должна содержать только строчные символы!

Также обратите внимание, что ошибка 459156 проекта chromium по-прежнему не позволяет запускать url напрямую, вы должны ссылаться на веб-страницу, содержащую этот код JavaScript:

 <!DOCTYPE html> <html> <body> <script language="javascript"> window.location = 'customscheme://customHost/49FYTJTF00'; </script> </body> </html> 

Пользователям, приземляющимся на этой странице, автоматически будет предложено либо диалоговое окно выбора действий, либо непосредственно отправить на свою активность.

Чтобы попробовать это, откройте браузер Android, перейдите к URL-адресу ниже и скопируйте этот фрагмент в редакторе выше: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_intro

Gif, показывающий браузер + JavaScript, открывающий активность

Gif

Оригинальное сообщение

Я опробовал ваш пользовательский URI, и он работает на Android 5.0

Но вы должны знать о следующих двух ошибках / проблемах:

  1. Ошибка 459156 проекта Chromium. Это означает, что запуск пользовательских схем из браузера Android не работает, если URL-адрес не применяется с использованием JavaScript. Обходной путь см. В этой статье StackOverflow: OAuth и пользовательская схема приводят к «ERR_UNKNOWN_URL_SCHEME» в Chrome
  2. Ошибка 80971: URI с пользовательской схемой не может быть нажата в SMS-тексте (Linkify?)

Мой подход

Я создал два отдельных упражнения, один из них как приемник намерений, а другой – как пусковую установку. В запуске действует EditText, где может быть введен полный URI и кнопка для запуска введенного URI.

Main.java onClick (Запуск активности)

 @Override public void onClick(View view) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(input.getText().toString())); try { startActivity(intent); } catch(ActivityNotFoundException e){ Toast.makeText(this, "Auww!! No Activity can open this URI!", Toast.LENGTH_SHORT).show(); } } 

Manifest.xml (только действия)

Обратите внимание на <data android:pathPattern=".*"/> Часть. Эта часть важна, поэтому все, что принимается хостом, будет считаться действительным.

 <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".UriActivity" android:label="@string/app_name"> <!-- This intent-filter will open any URI with the following forms: customscheme://customHost/49FYTJTF00 customscheme://customHost https://www.google.com/something/something http://www.google.com/ http://google.com/something --> <intent-filter> <data android:scheme="https"/> <data android:scheme="http"/> <data android:host="google.com"/> <data android:host="www.google.com"/> <data android:scheme="customscheme"/> <data android:host="customHost"/> <data android:pathPattern=".*"/> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity> 

UriActivity.java (Получение активности)

 public class UriActivity extends ActionBarActivity { private TextView tvText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_uri); tvText = (TextView) findViewById(R.id.text); setTextFromIntent(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setTextFromIntent(); } private void setTextFromIntent(){ StringBuilder text = new StringBuilder(); Uri data = getIntent().getData(); if(data != null){ text.append("Path:\n"); text.append(data.getPath()); text.append("\n\nScheme:\n"); text.append(data.getScheme()); text.append("\n\nHost:\n"); text.append(data.getHost()); text.append("\n\nPath segments:\n"); text.append(Arrays.toString(data.getPathSegments().toArray())); } else { text.append("Uri is null"); } tvText.setText(text); } } 

Скриншот:

Результат отправки пользовательского намерения в UriActivity

Загрузка тестового проекта:

Я сделал загрузку для проекта, если вы не попробуете сами.

Вместо того, чтобы использовать ссылку на customScheme: // customHost / 49FYTJTF00, вы пробовали использовать ссылку типа

 <a href="intent://customHostName/49FYTJTF00#Intent;scheme=customScheme;end"> 

Chrome должен иметь возможность открыть это приложение просто отлично. В то же время это может не работать во всех браузерах.

Вы написали:

  <data android:host="customHostName" android:scheme="customScheme" /> 

Итак, используйте customScheme://customHostName/49FYTJTF00
Вместо customScheme://customHost/49FYTJTF00

Имейте в виду, что если вы хотите запустить приложение из Google Chrome, вы должны сделать это по- другому .

Используйте pathprefix.

  android:pathPrefix="/" 

Это может решить вашу проблему. Пожалуйста, следуйте URL-адресу разработчика .