防止应用在导航栏上按下 Home 时返回 BootActivity

Posted

技术标签:

【中文标题】防止应用在导航栏上按下 Home 时返回 BootActivity【英文标题】:Prevent app from returning to BootActivity when Home is pressed on the navigation bar 【发布时间】:2020-12-09 19:13:44 【问题描述】:

我正在构建一个启动 3rd 方应用程序的 android 应用程序 - 这两个应用程序都以全屏模式运行。

当第 3 方应用程序启动时,如果我从底部向上滑动,我会看到 Android 导航栏(很好) - 但是,如果我随后按下此导航栏上的 Android 主页按钮,第 3 方应用程序将退出(好),但我的应用程序返回到主启动活动,而不是我从中启动应用程序的活动。

我的应用程序清单包含..

<activity android:name=".boot.BootActivity"
    android:configChanges="keyboardHidden|locale|layoutDirection"
    android:excludeFromRecents="true"
    android:label="@string/app_name"
    android:launchMode="singleTask"
    android:screenOrientation="landscape"
    android:windowSoftInputMode="stateAlwaysHidden">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.HOME" />
    </intent-filter>
</activity>

<activity android:name=".main.MainActivity"
    android:configChanges="keyboardHidden|locale|layoutDirection"
    android:label="@string/title_activity_main"
    android:launchMode="singleTask"
    android:screenOrientation="landscape"
    android:windowSoftInputMode="stateAlwaysHidden" />

在等待用户选择开始加载 MainActivity 的按钮之前,BootActivity 会执行一系列预加载和模型生成,该按钮会显示第 3 方应用程序的菜单和概要。

当第 3 方启动时,我们在 Android 导航栏上向上滑动并按 Home,logcat 会同时获取“android.intent.action.MAIN”和“android.intent.category.HOME”。

如上所述,这会导致应用返回启动活动 - 但我希望第 3 方应用退出并返回 MainActivity 中的应用概要。

是否可以通过编程方式添加、删除或暂时禁用意图过滤器?

【问题讨论】:

& restoreInstance() & onResume() & onPause() 否则它将根据意图文件管理器引导第一个活动 【参考方案1】:

通常使用这些特殊的启动模式 (singleTask) 是个坏主意。如果您的BootActivity 正在启动HomeActivity,那么这将不会在新任务中运行,即使启动模式会暗示这一点,因为这些活动都具有相同的taskAffinity。如果你真的想让它们在不同的任务中运行,那么你需要设置一个或另一个(或两者)的taskAffinity,使它们不一样。阅读一下taskAffinity 的工作原理。

【讨论】:

以上是关于防止应用在导航栏上按下 Home 时返回 BootActivity的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter中登录后禁用用户返回

按下标签栏项目时如何关闭视图?

在 iPad 上按下 HOME 按钮后 CollectionView 崩溃

如何更改导航栏上“返回”按钮的标题

在锁定屏幕上按主页按钮启动家庭更换应用程序

在点击按钮时按下导航控制器