2011-12-14 11 views
16

Hice una Vista sin actividad usando WindowManager.¿Alguien sabe cómo getWindow() en el servicio en Android?

pero tengo que cambiar de estado de vista, como a continuación

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
WindowManager.LayoutParams.FLAG_FULLSCREEN); 

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

pero GetWindow() no se puede utilizar en el servicio.

¿hay alguna manera?

+0

Los servicios no tienen una IU. ¿Qué está tratando de lograr? –

+0

Sé que el servicio no puede tener una IU. Pero lo hice usando addView() && surfaceView. –

+1

Eso en realidad no crea una interfaz de usuario; solo crea un par de objetos Ver. Voy a repetir mi pregunta: ¿qué estás tratando de lograr? –

Respuesta

1

Según servicio no tiene interfaz de usuario, usted tiene que comenzar la actividad de la misma para GetWindow atributo() ..

O haced una actividad transparente o simplemente comenzar la actividad, GetWindow() e inmediatamente terminarlo. Creo que tienes que hacer una actividad transparente. (Esta es mi opinión personal)

+0

Gracias por la respuesta. Pero no puedo iniciar la actividad. Solo tengo que cambiar el modo Completo <-> no lleno en servicio. –

+0

Si desea obtener el atributo Ventana, entonces, de todos modos, creo que debe usar Actividad ... – user370305

0

Lo que estás tratando de hacer, según tengo entendido, es tener la señal de servicio de que se debe hacer un cambio en la apariencia de una actividad. La forma de hacerlo es que el servicio emita un intento usando Context.sendBroadcast(Intent) y que su actividad responda en su método onReceive. La respuesta aceptada en this thread tiene más detalles sobre cómo configurar esto.

6

Usted no se puede obtener una ventana en un Servicio. Pero usted puede use WindowManager para agregar una vista (raíz) como ya lo hizo.

Y también puede actualizar la vista a través de updateViewLayout, puede cambiar el estado de su ventana (tipo de ventana, bandera, x, y, w, h, gravedad, etc ...) como los códigos siguientes.

private WindowManager mWindowManager; 
private WindowManager.LayoutParams mLayoutParams; 
.......... 

//let's assume that an event occurred 
if(mConfiguration.orientation==Configuration.ORIENTATION_LANDSCAPE){ 
    mLayoutParams.screenOrientation=Configuration.ORIENTATION_PORTRAIT; 
} 
mLayoutParams.softInputMode=WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN; 

mLayoutParams.gravity = Gravity.TOP|Gravity.CENTER; 
int flag=0 
      |WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN 
      |WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
      |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM 
      ; 
mLayoutParams.flags=flag; 

mWindowManager.updateViewLayout(mRootView, mLayoutParams); 
+0

cómo obtener mRootView? –

+1

@quicklearner mRootView es tu propia instancia de vista que habrías agregado previamente a través de mWindowManager.addView() – alfongj

Cuestiones relacionadas