我遇到了同样的问题,而且我真的只能找到一种解决方案。我不知道为什么,但是,是的,android 中的某些东西会在启动时阻止任务锁定,这让我很困惑,因为任务锁是为了创建这些“信息亭”类型的应用程序而设计的。我能找到的唯一解决方案是检测未锁定的情况,然后重新启动应用程序。这有点“hacky”,但你还能做什么呢?
为了检测未锁定的情况,我创建了一个状态变量并分配状态(锁定、锁定、解锁、解锁)。然后,在 onTaskModeExiting 的设备管理接收器中,如果状态不是“解锁”,那么我知道它会自行解锁。因此,如果这种情况发生在失败的地方,我然后使用此方法重新启动应用程序(在警报管理器中安排应用程序,然后终止该应用程序):
如何以编程方式“重新启动”Android应用程序? https://stackoverflow.com/questions/6609414/how-to-programmatically-restart-android-app
这是一些示例代码:
设备管理接收器
@Override
public void onLockTaskModeEntering(Context context, Intent intent, String pkg) {
super.onLockTaskModeEntering(context, intent, pkg);
Lockdown.LockState = Lockdown.LOCK_STATE_LOCKED;
}
@Override
public void onLockTaskModeExiting(Context context, Intent intent) {
super.onLockTaskModeExiting(context, intent);
if (Lockdown.LockState != Lockdown.LOCK_STATE_UNLOCKING) {
MainActivity.restartActivity(context);
}
Lockdown.LockState = Lockdown.LOCK_STATE_UNLOCKED;
}
主要活动
public static void restartActivity(Context context) {
if (context != null) {
PackageManager pm = context.getPackageManager();
if (pm != null) {
Intent intent = pm.getLaunchIntentForPackage(context.getPackageName());
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
int pendingIntentId = 223344;
PendingIntent pendingIntent = PendingIntent.getActivity(context, pendingIntentId, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, pendingIntent);
System.exit(0);
}
}
}
}
private void lock() {
Lockdown.LockState = Lockdown.LOCK_STATE_LOCKING;
startLockTask();
}
private void unlock() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
if (am.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_LOCKED) {
Lockdown.LockState = Lockdown.LOCK_STATE_UNLOCKING;
stopLockTask();
}
}
事实上,这是我实现的简化版本。但它应该有望让您找到解决方案。