Android 对设备管理员使用锁定任务模式时键盘不显示

Android 对设备管理员使用锁定任务模式时键盘不显示,android,keyboard,Android,Keyboard,使用设备管理员的锁定任务模式,我似乎无法显示软键盘 以下是我正在做的: 两个应用程序,一个是管理员应用程序,另一个是普通用户应用程序。目标是将手机锁定到用户应用程序。这包括将其设置为home的持久首选活动、使用锁定任务模式以及设置锁定任务包 // In my admin application private static final String[] PACKAGES = new String[]{ BuildConfig.APPLICATION_ID, "com.androi

使用设备管理员的锁定任务模式,我似乎无法显示软键盘

以下是我正在做的:

两个应用程序,一个是管理员应用程序,另一个是普通用户应用程序。目标是将手机锁定到用户应用程序。这包括将其设置为home的持久首选活动、使用锁定任务模式以及设置锁定任务包

// In my admin application
private static final String[] PACKAGES = new String[]{
    BuildConfig.APPLICATION_ID,
    "com.android.settings",
    "com.xyz.myapp"
};

final IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MAIN);
intentFilter.addCategory(Intent.CATEGORY_HOME);
intentFilter.addCategory(Intent.CATEGORY_DEFAULT);

devicePolicyManager.addPersistentPreferredActivity(adminComponent, intentFilter, componentName);
devicePolicyManager.setLockTaskPackages(adminComponent, PACKAGES);

// In my user app main activity:
startLockTask();
我们的应用程序中有一些工作流要求用户调整android设置,因此也允许使用设置应用程序。启用admin(以便启用这两个策略)并重新启动后,手机会立即正确打开我的用户应用程序,并锁定到单个应用程序。但是,键盘不会显示任何编辑文本/文本输入。这几乎就像系统试图显示键盘一样,因为后退按钮箭头从“后退”位置(指向左侧)更改为“关闭”位置(指向下方)

我已经试验了好几天试图找出根本原因,但我唯一发现的是

setLockTaskPackages(...)
似乎是锁定任务模式的罪魁祸首。我曾尝试在锁定任务模式下将键盘应用程序添加为允许的包,但没有任何区别。此外,键盘也被禁止从其他允许的应用程序打开(android设置),因此我不认为这是我的用户应用程序中配置不正确的情况


我已经在Nexus5x、Google Pixel和Google Pixel2上对此进行了测试。所有运行股票8.1。

我知道你问这个问题已经很久了,但这可能对其他人有所帮助

请参见此处的答案: 基本上你不应该做你正在做的事情:当设备被锁定时不要启动锁定任务模式,因为用户可能无法解锁设备

也就是说,您可以在所有窗口(甚至对于您打开并需要输入的对话框)上设置“锁定时显示”标志(自API 27以来已弃用)或“关闭”标志(自API 26以来已弃用)或“锁定时调用设置显示”(API 27+,尚未找到在对话框上使用此标志的方法)

根据您的业务流程,您可以执行以下操作之一:

  • 在设置设备管理员之前,完全禁用keyguard(设置为None)
  • 如果您可以访问所有需要键盘输入的应用程序的源,请在所有窗口上设置正确的标志
  • 当设备锁定时需要键盘输入时(请参阅KeyguardManager.isKeyguardLocked):
    • 呼叫停止锁定任务
    • 使用KeyguardManager.requestDismissKeyguard请求客户解锁设备
    • 解锁设备后(keyguardDismsCallback.ondismissSuccessed),调用startLockTask锁定设备
    • 出于安全原因,您应该考虑在退出时锁定该设备,并请求用户在从锁定屏幕访问敏感功能时进行身份验证(请参阅KeaGueDeMaCurr.CyrEngDeMeCeCurrEntIrrPurtIn和KiGueldMealth.IsKeAcGudStand)。