我正在尝试在我的应用程序中实现深度链接。我有两个活动:SplashScreenActivity和MainActivity。两个活动都有相同的意图过滤器,例如:

<activity
        android:name="com.example.MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <data
                android:host="product"
                android:scheme="gg" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
</activity>

<activity
        android:name="com.example.SplashScreenActivity" >
        <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="product"
                android:scheme="gg" />
        </intent-filter>
    </activity>

我要做的是:当应用程序已经打开时,我希望主活动被触发,而当应用程序未打开时,我希望SplashScreenActivity被触发。但是一个弹出窗口出现,希望我选择其中一个活动,我不希望这样。我希望它是自动选择的。那么,我该如何实现呢?
谢谢

最佳答案

->首先,你不想有多个选择意味着你只想有一个选择。因此,您应该只有一个Activity来处理此类事件。
即:如下所述,您应该在清单文件中有DeepLinkingActivity

<activity
        android:name="com.example.DeepLinkingActivity" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <data
                android:host="product"
                android:scheme="gg" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
</activity>

<activity
        android:name="com.example.MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />


            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
</activity>

<activity
        android:name="com.example.SplashScreenActivity" >
        <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" />
        </intent-filter>
</activity>

->你想根据某些条件来决定下一个流,比如你的应用程序是否在前台,所以只需将逻辑放入DeepLinkingActivity中,并确保你没有为该活动设置任何布局文件。
即。:
private boolean isAppInForeground(Context ctx) {
    ActivityManager activityManager = (ActivityManager) ctx.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE);

    if (services == null) {
        return false;
    }

    if (services.size() > 0 && services.get(0).topActivity.getPackageName().toString().equalsIgnoreCase(ctx.getApplicationContext().getPackageName().toString())) {
        return true;
    }

    return false;
}

基于上述逻辑,您可以将用户重定向到SplashScreenActivityMainActivity
注:
由于要检索当前正在进行的任务,您需要在清单文件中添加以下权限。
    <uses-permission android:name="android.permission.GET_TASKS" />

10-08 18:26