我目前有一个定期的问题,当我调用IllegalArgumentException
时,我得到了Activity.startLockTask()
。我的应用程序安装了设备所有者应用程序,该应用程序允许我的程序包自动固定其自身。
下面的代码正在检查以确保我的程序包可以锁定自身。如果可以,则将其自身固定。
代码:
if (dpm.isLockTaskPermitted(getPackageName())) {
super.startLockTask();
}
Logcat:
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秒钟固定一次任务,则每次都会继续失败。我尝试固定
onCreate
,onWindowFocusChanged
,onResume
和onStart
。有人知道这个问题可能是什么吗?
以供引用:
第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/