Мое приложение падает при попытке отключить кнопку домой - PullRequest
0 голосов
/ 25 июня 2018

Я пытался отключить кнопку домой, используя следующий код:

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_HOME) {
        Log.i("TAG", "Press Home");
        System.exit(0);
        return true;
    } else {
        return super.onKeyDown(keyCode, event);
    }
}

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

}

Но это приводит к сбою приложения.

Сбой вызван именно строкой:

this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);

Почему это происходит? Что можно сделать, чтобы решить эту проблему?

Журнал аварии:

06-25 17:47:18.620 18125-18125/com.example.myapp E/AndroidRuntime: FATAL EXCEPTION: main
                                                                      Process: com.example.nandagp.qapp, PID: 18125
                                                                      java.lang.IllegalArgumentException: Window type can not be changed after the window is added.
                                                                          at android.os.Parcel.readException(Parcel.java:1962)
                                                                          at android.os.Parcel.readException(Parcel.java:1904)
                                                                          at android.view.IWindowSession$Stub$Proxy.relayout(IWindowSession.java:966)
                                                                          at android.view.ViewRootImpl.relayoutWindow(ViewRootImpl.java:7029)
                                                                          at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2264)
                                                                          at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1738)
                                                                          at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7745)
                                                                          at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                                                                          at android.view.Choreographer.doCallbacks(Choreographer.java:723)
                                                                          at android.view.Choreographer.doFrame(Choreographer.java:658)
                                                                          at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
                                                                          at android.os.Handler.handleCallback(Handler.java:789)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                          at android.os.Looper.loop(Looper.java:164)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:6938)
                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                          at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Когда пользователь нажимает «KEYCODE_HOME», вы «выключаете» приложение:

if (keyCode == KeyEvent.KEYCODE_HOME) {
        Log.i("TAG", "Press Home");
        System.exit(0);

Вы будете удалены System.exit (0)

0 голосов
/ 25 июня 2018

Вы должны удалить этот код

this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);

Из метода onAttachedToWindow() и поместите его в onCreate.

Надеюсь, это поможет

PS: для переопределения кнопки home, прочитайте этот пост . Отключить его нелегко и не рекомендуется, это приведет к тому, что пользователь не сможет выйти из вашего приложения, и (imo) это не очень хорошая идея, если вы не работаете в режиме киоска . Так что подумайте, если вам действительно нужно это сделать, и, если вы это сделаете, обратитесь к первой ссылке, которую я разместил

...