Android - 如果应用程序是通过单击URL启动的,则DeepLink不起作用
问题描述:
我正在使用DeepLinkingActivity
来处理深层链接,并且如果目标活动不在顶层,则防止其无法使用。Android - 如果应用程序是通过单击URL启动的,则DeepLink不起作用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent){
Uri data = intent.getData();
if(data != null) {
final Intent newIntent = new Intent(this, LauncherActivity.class);
if(!isTaskRoot()) {
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
}
newIntent.setData(data);
startActivity(newIntent);
}
}
我用android:noHistory="true"
在AndroidManifest所以我并不需要调用finish()
。 如果通过单击应用程序图标或单击通知启动应用程序,它会很好地工作。 如果通过单击URL来启动它,那么如果我单击相同的URL(未调用onCreate
和newIntent
),则深层链接将不会再工作。但是,如果我点击其他人,它工作正常。 也就是说,如果点击“www.google.com”将启动我的应用程序,那么这个URL将不会再工作,直到我关闭我的应用程序。但是“www.yahoo.com”即使点击过多次也能正常工作。
我使用API 26,支持库26.0.2。
答
问题通过将android:launchMode="singleTask"
添加到清单解决。
<activity android:name=".DeepLinkActivity"
android:noHistory="true"
android:launchMode="singleTask">
<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="http"/>
<data android:scheme="https"/>
<data android:host="www.mydomain.com"/>
<data android:pathPattern="/page/..*/M\\..*"/>
</intent-filter>
</activity>
<activity
android:name=".LauncherActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
</activity>
<activity android:name=".SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
所以它不会启动第二个LauncherActivity
,可以通过点击链接启动。