gpt4 book ai didi

android - 如何处理两个 Activity 的相同 Intent 过滤器?

转载 作者:太空狗 更新时间:2023-10-29 16:16:07 24 4
gpt4 key购买 nike

我正在尝试在我的应用中实现深度链接。我有两个 Activity :SplashScreenActivity 和 MainActivity。这两个 Activity 具有相同的 Intent 过滤器,例如:

<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>

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

谢谢

最佳答案

-> 首先,您不希望有多个选项 可供选择意味着您只需要一个选项。所以简单地说,您应该只有一个Activity 来处理 此类事件。

即:如下所述,您应该在 list 文件中包含 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 中并确保您没有为该 Activity 设置任何布局文件。

即:

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

注意:

如果您想检索当前正在进行的任务,您需要在 list 文件中添加以下权限。

    <uses-permission android:name="android.permission.GET_TASKS" />

关于android - 如何处理两个 Activity 的相同 Intent 过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27357172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com