从一个Activity到另一个Activity启动LockTask()

5
我正在使用Activity.startLockTask(),发现如果我在A Activity中锁定屏幕,就无法切换到B Activity。似乎我必须在B Activity中执行startLockTask()stopLockTask()然后再次执行startLockTask()
有没有更好的方法来处理这个问题,使得无论我在哪个Activity上,都可以锁定整个应用程序呢?
以下是我锁定应用程序的方法:
// start lock task mode if it's not already active
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
// ActivityManager.getLockTaskModeState api is not available in pre-M
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
    if (!am.isInLockTaskMode()) {
        startLockTask();
    }
} else {
    if (am.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_NONE) {
        startLockTask();
    }
}

这是我停止固定的方法。
stopLockTask()

从方法文档的第一行开始:请求将此Activity置于用户锁定到当前任务的模式中。<- 强调此Activity。我不知道有什么方法可以锁定应用程序,即使您可以这样做,它是否仍具有相同的效果,只是范围更大? - Mark
如何将具有多个活动的整个应用程序固定?这就是问题所在。我描述的行为与文档所说的相符,所以我明白了。那么我提出的问题呢? - portfoliobuilder
此外,只有某些设备无法使用此功能。因此,在某些设备上可以使用。将固定在Activity A上并转换到Activity B。所以这是可能的。我正在寻求正确的实现或参考正确的实现,以便它可以在所有设备上始终正常工作。如您所知,管理Android的15,000多个设备是Android的棘手部分。 - portfoliobuilder
也许我误解了,我的第一句话解释了你的第一段,而我的第二句话则说明我不知道答案——如果我知道,我会“回答”问题,而不是评论?我只是从阅读文档的角度给出了你必须使用当前方法的原因。 - Mark
1个回答

6

这个问题很棘手,但解决方法非常简单。对于任何遇到相同问题的人,你只需要将你的launchMode改为single task即可。一旦我更新了我的清单文件,我就能够在更改活动时保持固定。

android:launchMode="singleTask"

这确实可以使所有活动保持固定,但我发现在 Android 12 之前,活动转换相当突兀。当切换活动时,它看起来像应用程序切换。 - Adam Johns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接