【问题标题】:Keyboard not displaying when using Lock Task Mode with Device Admin使用设备管理员的锁定任务模式时键盘不显示
【发布时间】:2018-02-28 15:43:18
【问题描述】:

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

这就是我正在做的事情:

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

// 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 设置,因此设置应用程序也是允许的。启用管理员(以便启用这两个策略)并重新启动后,手机会立即正确打开我的用户应用程序,并且手机会锁定到单个应用程序。但是,对于任何 EditTexts/文本输入,键盘都不会出现。这几乎就像系统试图显示键盘一样,因为后退按钮箭头从“返回”位置(指向左)变为“关闭”位置(指向下方)。

我已经尝试了几天试图找出根本原因,但我发现的唯一一件事是调用

setLockTaskPackages(...)

似乎是锁定任务模式的罪魁祸首。我试图在锁定任务模式下将键盘应用程序添加为允许的包,但这没有任何区别。此外,键盘也无法从其他允许的应用程序中打开(android 设置),因此我认为这不是我的用户应用程序中配置错误的原因。

我在 Nexus 5X、Google Pixel 和 Google Pixel 2 上对此进行了测试。全部运行 Stock 8.1。

【问题讨论】:

    标签: android keyboard


    【解决方案1】:

    我知道你问这个问题已经很长时间了,但也许这对其他人有帮助。

    在此处查看答案:Android 8.1 (API 27) - Keyboard not showing in Kiosk-mode app after reboot 基本上你不应该做你正在做的事情:当设备被锁定时不要启动锁定任务模式,因为用户可能无法解锁设备

    话虽如此,您可以在所有窗口(即使对于您打开并需要输入的对话框)上设置 FLAG_SHOW_WHEN_LOCKED(自 API 27 以来已弃用)或 FLAG_DISMISS_KEYGUARD(自 API 26 以来已弃用)或在活动上调用 setShowWhenLocked(API 27+,避风港'没有找到在对话框中使用它的方法)。

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

    • 在设置设备管理员之前完全禁用键盘保护(设置为无)
    • 如果您可以访问所有需要键盘输入的应用的源代码,请在所有窗口上设置正确的标志
    • 当设备被锁定时需要键盘输入时(请参阅 KeyguardManager.isKeyguardLocked):
      • 调用 stopLockTask
      • 使用 KeyguardManager.requestDismissKeyguard 请求客户解锁设备
      • 设备解锁后 (KeyguardDismissCallback.onDismissSucceeded) 调用 startLockTask 锁定设备
      • 出于安全原因,您应该考虑在退出时锁定设备,并在从锁定屏幕访问敏感功能时要求用户进行身份验证(请参阅 KeyguardManager.createConfirmDeviceCredentialIntent 和 KeyguardManager.isKeyguardSecure)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-13
      • 2017-04-19
      • 1970-01-01
      • 2014-10-14
      • 2015-07-26
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多