Ответ 1
Пожалуйста, используйте pathprefix.
android:pathPrefix="/"
Это может решить вашу проблему. Пожалуйста, следуйте URL-адрес разработчика Android.
Я использую этот кусок кода для запуска своего приложения по ссылке.
<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.
Когда я нажимаю ссылку, отображается только список запущенных браузеров.
Что мне делать?
Пожалуйста, используйте pathprefix.
android:pathPrefix="/"
Это может решить вашу проблему. Пожалуйста, следуйте URL-адрес разработчика Android.
После тестирования и тестирования я обнаружил, что если ваша схема содержит символ верхнего регистра, браузер не сможет ее запустить. Ваша схема должна содержать только строчные символы!
Также обратите внимание, что ошибка 459156 проекта chromium по-прежнему не позволяет вам запускать url напрямую, вы должны ссылаться на веб-страницу, содержащую этот код JavaScript:
<!DOCTYPE html>
<html>
<body>
<script language="javascript">
window.location = 'customscheme://customHost/49FYTJTF00';
</script>
</body>
</html>
Пользователям, приземляющимся на этой странице, автоматически будет предложено либо диалоговое окно выбора действий, либо непосредственно отправить в свою активность.
Чтобы попробовать, откройте браузер Android, перейдя по указанному ниже адресу и скопируйте этот фрагмент в редакторе: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_intro
Gif, показывающий браузер + JavaScript, открывающий активность
Я опробовал свой пользовательский URI, и он работает на Android 5.0
Но вы должны знать о следующих двух ошибках/проблемах:
Я создал два отдельных Деяния, один как приемник цели, а другой - как пусковую установку. В запуске действует 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);
}
}
Скриншот:
Загрузка тестового проекта:
Я сделал скачать для проекта, если вы не попробуете сами.
Вместо использования ссылки на 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, вы должны сделать это в другим способом.