2012-09-24 13 views
5

En mi aplicación java que tengo este código¿Qué significa este código de Java de 4 líneas en la aplicación de Android?

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

cuando construyo para Android 2.3 (nivel 10) se compila y funciona bien. Pero cuando construyo para Android 4.0 (nivel 15) compila y me da accidente en tiempo de ejecución y el siguiente error

07-16 14:00:03.090: E/AndroidRuntime(29487): FATAL EXCEPTION: main 
07-16 14:00:03.090: E/AndroidRuntime(29487): java.lang.IllegalArgumentException: Window type can not be changed after the window is added. 

cuando comento esta línea y construir funciona muy bien y no hay problema ..

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

así que no entiendo por qué este happning y qué significa este código?

Editar: alguna referencia son aquí

when I run app on my phone.The version is android 4.0.3

toddler safe app on android

+0

Simplemente significa cuando su actividad viene a primer plano como onDisplay en mora –

+0

Basta con establecer targetSDK a menos de 14. Entonces funcionará http://stackoverflow.com/a/32587231/3496570 – Nepster

Respuesta

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

se utiliza para desactivar botón de inicio en el androide pero

esta falla de seguridad se ha fijado en las versiones más recientes de Android por lo que no va a funcionar en el ICS y la gelatina de frijoles ... !!

2
@Override  
public void onWindowFocusChanged(boolean hasFocus) { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);  
    super.onWindowFocusChanged(hasFocus); 
} 

tuve algunos problemas con windowAttached así, trate de usar windowFocusChanged lugar.

+7

no funciona. probado en galaxy s3 con Android 4.1 –

4

He resuelto este problema poniendo

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

en onCreate antes de llamar a super.

protected void onCreate(Bundle savedInstanceState) { 

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

     super.onCreate(savedInstanceState); 
} 

Saludos desde Medellín

Cuestiones relacionadas