我正在使用DeepLinkingActivity
来处理深层链接,并防止它在目标活动不在顶层时无效。
@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);
}
}
我在AndroidManifest中使用android:noHistory="true"
,因此我无需致电finish()
。
如果通过单击应用程序图标或单击通知启动应用程序,则效果很好。
如果它是通过点击网址启动的,那么如果我点击相同的网址(未调用onCreate
或newIntent
),则深层链接将无法再次运行。但如果我点击其他人,它的工作正常。
也就是说,如果单击“www.google.com”将启动我的应用程序,那么在我关闭我的应用程序之前,此网址将无法再次运行。但是“www.yahoo.com”即使被点击不止一次也能正常工作。
我正在使用API 26,支持库26.0.2。
答案 0 :(得分:0)
通过向清单添加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
,可以通过点击链接启动。