gpt4 book ai didi

android - Activity.startLockTask() 偶尔会抛出 IllegalArgumentException

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:29 35 4
gpt4 key购买 nike

我目前有一个周期性的问题,当我调用 Activity.startLockTask() 时,我得到一个 IllegalArgumentException。我的应用程序安装了一个设备所有者应用程序,它允许我的包自动固定自己。

下面的代码正在检查以确保我的包可以自行锁定。如果可以,则它固定自己。

代码:

if (dpm.isLockTaskPermitted(getPackageName())) {
super.startLockTask();
}

日志:

java.lang.IllegalArgumentException: Invalid task, not in foreground
at android.os.Parcel.readException(Parcel.java:1544)
at android.os.Parcel.readException(Parcel.java:1493)
at android.app.ActivityManagerProxy.startLockTaskMode(ActivityManagerNative.java:5223)
at android.app.Activity.startLockTask(Activity.java:6163)

问题是我的应用偶尔需要自行重启。所以我们取消固定,完成 Activity 并用新任务再次启动它,然后退出我们的流程。当 Activity 恢复时,它会尝试固定自己 - 有时有效 - 有时无效。我相信我们如何重新启动可能是抛出异常的原因,但这无关紧要,因为新 Activity 在前台并且是重点。

一旦 Activity 固定失败,只要它尝试,它就会继续失败:如果我坐在那里每 5 秒尝试固定任务,它每次都会继续失败。我试过在 onCreateonWindowFocusChangedonResumeonStart 中固定。

有人知道问题出在哪里吗?

供引用:
第 8853 行:https://android.googlesource.com/platform/frameworks/base/+/android-5.0.2_r1/services/core/java/com/android/server/am/ActivityManagerService.java

最佳答案

我也遇到了同样的问题,还没找到合适的解决办法。但这就是我目前所做的。

Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
if (dpm.isLockTaskPermitted(getPackageName())) {
super.startLockTask();
}
}catch (Exception exception) {
Log.v("KioskActivity","startLockTask - Invalid task, not in foreground");
}
}
},1500);

即使触发了 onWindowFocusChanged,请求锁定的应用程序似乎还没有获得焦点。通过将对 startLocktask 的调用延迟一段时间,它将起作用。然而,有一小段时间应用程序不会被固定/锁定。我已经通过一些额外的安全措施解决了这个问题(我在后台有一个长期运行的服务,可以防止通知栏下拉,如果打开,将关闭设置窗口)。

顺便说一句,你有没有设法以适当的方式解决这个问题?

关于android - Activity.startLockTask() 偶尔会抛出 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27826431/

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