IllegalArgumentException: No se puede cambiar el tipo de ventana después de agregar la ventana

He intentado el consejo aquí , el consejo aquí , el consejo aquí , he comentado el onAttachedToWindow () en mi actividad base. Tengo dos Actividades que heredan de esta clase, BaseActivity. Uno corre, y uno no. ¿Cuál podría ser la diferencia? Mi SDK objetivo es 19; cambiarlo a 12 no hace ninguna diferencia. Aquí está mi onCreate para BaseActivity:

@Override protected void onCreate(Bundle savedInstanceState) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); requestWindowFeature(Window.FEATURE_NO_TITLE); super.onAttachedToWindow(); super.onCreate(savedInstanceState); .... } 

Al navegar a la segunda actividad, pasando por el código, lo hace a través de onCreate (), onResume (), luego se bloquea.

¿Cual podría ser el problema?

Stacktrace:

 06-26 13:41:57.963 28667-28667/com.assistek.ediary E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.assistek.ediary, PID: 28667 java.lang.IllegalArgumentException: Window type can not be changed after the window is added. at android.os.Parcel.readException(Parcel.java:1550) at android.os.Parcel.readException(Parcel.java:1499) at android.view.IWindowSession$Stub$Proxy.relayout(IWindowSession.java:903) at android.view.ViewRootImpl.relayoutWindow(ViewRootImpl.java:5301) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1507) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

EDIT : si cambio a la API de destino 12 y poner todos los cambios de onCreate en onAttachedToWindow , puedo conseguir esta excepción para irse, pero me gustaría que el SDK objetivo de 19.

Mi nueva onCreate ():

 @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); ... } 

Mi nuevo onAttachedToWindow ():

 @Override public void onAttachedToWindow() { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } 

Esto sólo funciona con la API de destino 12.

Respuesta El destino mínimo debe ser inferior a 14 cuando se utiliza WindowManager.LayoutParams.TYPE_KEYGUARD

Trate de usar esto para la ventana:

 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_adjectives); 

Me encuentro con la misma pregunta. Pero después de detener la adición

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); requestWindowFeature(Window.FEATURE_NO_TITLE); 

antes de super.onCreate(savedInstanceState); de BaseActivity , funciona bien. super.onCreate(savedInstanceState); códigos anteriores antes de super.onCreate(savedInstanceState); de BaseActivity de BaseActivity .

Por cierto, no creo que usted tiene que llamar a super.onAttachedToWindow(); dentro de los métodos del círculo de la vida de la Activity . Porque onAttachedToWindow(); se llama cuando la vista se adjunta a una ventana cuando se sobreescribe una View .

También tuve este problema, pero lo resolví quitando la ventana, cambiando los parámetros y agregando la ventana otra vez. Esto fue lo suficientemente bueno para mí.

WindowManager.removeView(View); params = params2; //changed the params to something else WindowManager.updateViewLayout(View, params); WindowManager.addView(View, params);

Lo siento por la respuesta tardía. Usted debe agregar:

 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

en el método onCreate si está utilizando api nivel 15 o superior. Esto funciona para mi.

  • Android Salir del modo de pantalla completa
  • Mostrar una vista en WindowManager que puede venir de "fuera de la pantalla"
  • Android: textisselectable no funciona en la ventana TYPE_SYSTEM_ALERT
  • WindowManager $ BadTokenException no se puede agregar la ventana
  • Detectar la contraseña de bloqueo de la pantalla de bloqueo por el usuario en Android
  • Superposición de la barra de navegación de Android
  • Superponer una capa Transparente de pantalla completa en Android 4.4 (KitKat)
  • Android.view.WindowManager $ BadTokenException
  • WindowManager de Android Window no reposiciona después de que el teclado es visble
  • Logcat para varios dispositivos que se ejecutan al mismo tiempo en Android Studio?
  • WindowManager.LayoutParams ¿por qué hay un método setTitle?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.