Android - 如果通过单击url启动应用程序,则DeepLink不起作用

时间:2017-09-25 16:48:21

标签: android android-intent

我正在使用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()。 如果通过单击应用程序图标或单击通知启动应用程序,则效果很好。 如果它是通过点击网址启动的,那么如果我点击相同的网址(未调用onCreatenewIntent),则深层链接将无法再次运行。但如果我点击其他人,它的工作正常。 也就是说,如果单击“www.google.com”将启动我的应用程序,那么在我关闭我的应用程序之前,此网址将无法再次运行。但是“www.yahoo.com”即使被点击不止一次也能正常工作。

我正在使用API​​ 26,支持库26.0.2。

1 个答案:

答案 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,可以通过点击链接启动。