Андроид с глубокими ссылками
Я пытаюсь реализовать глубокое связывание в своем приложении, я добавил getIntent в метод onResume своей основной деятельности, и я могу открыть свою основную деятельность по ссылке, но у меня возникают следующие проблемы.
если я открою приложение, щелкнув значок приложения в первый раз, тогда действие намерения будет Intent.ACTION_MAIN, оно будет постоянным для всех последующих попыток, т.е. когда я открываю приложение по ссылке, intent.action предполагается Intent.ACTION_VIEW, но действие всегда ACTION_MAIN.
Если приложение открывается по ссылке из Chrome, то я вижу два экземпляра моего приложения, то есть над Chrome и само мое приложение.
<activity android:name=".MainActivity" android:hardwareAccelerated="false" android:launchMode="singleTop"> // I used singleTop because i have implementd isTaskRoot in my main activity <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:host="clip.myapp.tp" android:pathPattern="/.*" android:scheme="mhhds" /> </intent-filter> </activity>
Ниже приведен onResume моего файла mainactivity.java, где я реализовал getIntent
@Override
protected void onResume() {
super.onResume();
mIntent = getIntent();
String appLinkAction = mIntent.getAction();
if(mIntent.getAction().equals(Intent.ACTION_VIEW)) {
Uri data = mIntent.getData();
String mIntentData = data.toString();
System.out.println("Intentdata:" + mIntentData);
}
}
1 ответ
Это потому что singleTop
не будет создавать новый экземпляр активности и всегда использовать существующий так
если я открою приложение, щелкнув значок приложения в первый раз, тогда действие намерения будет Intent.ACTION_MAIN, оно будет постоянным для всех последующих попыток, т.е. когда я открываю приложение по ссылке, intent.action предполагается Intent.ACTION_VIEW, но действие всегда ACTION_MAIN.
Из-за упомянутой причины, getIntent
вернет экземпляр, который был получен в первый раз вместо переопределения onNewIntent
который вернет экземпляр последнего намерения, поэтому используйте onNewItent
вместо onResume
если приложение открывается по ссылке из Chrome, то я вижу два экземпляра моего приложения, то есть выше Chrome и само мое приложение
Это потому, что ваше приложение ранее было открыто как отдельное (теперь в истории стека), а теперь оно открывается в chrome как результат поиска, поэтому это нормальное поведение.