添加窗口后无法更改窗口类型

时间:2015-04-14 20:24:03

标签: java android

我试图制作自定义锁定屏幕。所以,我不需要让用户按下主页按钮。一开始我写

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
setContentView(R.layout.lock_screen);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                    |WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

然后我重写OnKeyDown

 @Override
public boolean onKeyDown(int keyCode, android.view.KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)||(keyCode == KeyEvent.KEYCODE_POWER)||(keyCode == KeyEvent.KEYCODE_VOLUME_UP)||(keyCode == KeyEvent.KEYCODE_CAMERA)) {
    //this is where I can do my stuff
    return true; //because I handled the event
}
if((keyCode == KeyEvent.KEYCODE_HOME)){

    return true;
}

return false;

}

这里我重写onAttacheToWindow

 @Override
public void onAttachedToWindow() {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
    super.onAttachedToWindow();
}

但是它给了我错误IllegalArgumentException:添加窗口后无法更改窗口类型。我的错误在哪里?

如何处理主页按钮?

1 个答案:

答案 0 :(得分:0)

没有“好”的方法来处理主页按钮“什么都不做”。你真的只有两个选择,可能对你不够好或不够好:

  1. 创建自己的家庭启动器。用户必须选择您的应用作为其主发射器。
  2. 您还可以创建一个Service,在其中向窗口添加视图,并将其覆盖在其他所有内容之上。通过在服务中“显示”webview来查看我之前的回答:Android: Using WebView outside an Activity context。您需要修改params以填充屏幕并修复WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE以使用正确的标记来允许点击。这实际上不会阻止主页按钮,但它基本上会禁用它的功能。最后,这可能不适用于Android 5.0+,因为状态栏的下拉列表可能会覆盖您的窗口。