我遇到了Android 6.0的问题。 Marshmallow从官方Nexus工厂固件映像站点(https://developers.google.com/android/nexus/images)加载到Nexus 6。
我有一个应用程序,我使用AlarmManager启动一个禁用键盘锁的活动,这样即使手机被锁定也可以看到活动(就像闹钟应用程序一样)。 在此活动中,如果用户单击某个按钮,则会打开一个对话框,用户应在该对话框中键入EditText视图。当对话框显示或用户点击EditText时,它应该打开键盘。 这一直一直有效,似乎在我的Nexus 6上的每个操作系统版本上都有效。
我怀疑原因是当活动开始时手机被锁定,就好像我在手机解锁时启动活动,然后键盘显示完美。这似乎只发生在6.0上。
任何人都可以确认这一点,或者让我知道6.0中有什么变化我不知道吗?
感谢。
答案 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);
}
}