【问题标题】:keyboard not showing when phone is locked and an activity disables keyguard当手机被锁定并且活动禁用键盘保护时键盘不显示
【发布时间】:2015-10-14 16:52:56
【问题描述】:

我在使用 Android 6.0 时遇到了问题。 Marshmallow 已从官方 Nexus 工厂固件映像站点 (https://developers.google.com/android/nexus/images) 加载到 Nexus 6。

我有一个应用程序,我在其中使用 AlarmManager 启动一个禁用键盘保护的活动,这样即使手机被锁定,活动也可以看到(就像闹钟应用程序一样)。 在此活动中,如果用户单击按钮,则会打开一个对话框,用户应在其中键入 EditText 视图。当对话框显示或用户单击 EditText 时,它应该打开键盘。 这一直有效,并且似乎在我的 Nexus 6 上除了 6.0 之外的所有操作系统版本上都有效。

我怀疑原因是 Activity 启动时手机被锁定,就像我在手机解锁时启动 Activity 然后键盘显示完美。这似乎只发生在 6.0 上。

任何人都可以确认这一点,或者让我知道 6.0 中是否有我不知道的变化?

谢谢。

【问题讨论】:

    标签: android keyboard lockscreen android-6.0-marshmallow


    【解决方案1】:

    最后我找到了一个可行的解决方案。对话框窗口似乎在棉花糖中有自己的标志,必须设置。我在 AlertDialog 中这样做了:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("My Title");
    // Add other stuff for AlertDialog here
    AlertDialog alertDialog = builder.create();
    alertDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    alertDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    alertDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    alertDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    alertDialog.show();
    

    对于我的 PreferenceActivity,我必须扩展 EditTextPreference 以解决问题,然后在 XML 配置文件中使用 myappname.TextPref 而不是 EditTextPreference

    class TextPref extends EditTextPreference {
    
        public TextPref(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        protected void showDialog(Bundle state) {
            super.showDialog(state);
    
            Dialog dialog = getDialog();
            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
    }
    

    【讨论】:

    • 完美运行。我是否错过了文档中的某个地方,或者此更改完全没有记录?
    • 我在文档中没有找到任何内容,只是尝试了一下。不幸的是,Toast 消息似乎也存在同样的问题。但是我没有解决方法,因为似乎没有办法获得 Toast 的窗口。
    • 也许您可以尝试使用 SnackBar 代替 Toast。这对你有用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2023-03-31
    相关资源
    最近更新 更多