手机被锁定且活动禁用了键盘锁

时间:2015-10-14 16:52:57

标签: android keyboard lockscreen android-6.0-marshmallow

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

最后我找到了一个有效的解决方案。对话窗口似乎在Marshmallow有自己的标志,必须下注。我在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);
    }
}