2011-12-14 16 views
16

Ho creato una vista senza attività utilizzando WindowManager.qualcuno sa come ottenere getWindow() in servizio su Android?

ma devo cambiare lo stato di vista come qui di seguito

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

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

ma getWindow() non possono utilizzare in servizio.

c'è un modo?

+0

I servizi non dispongono di un'interfaccia utente. Cosa stai cercando di realizzare? –

+0

So che il servizio non può avere un'interfaccia utente. Ma l'ho fatto usando addView() && surfaceView. –

+1

Questo in realtà non crea un'interfaccia utente; crea solo un paio di oggetti View. Ripeterò la mia domanda: cosa stai effettivamente cercando di realizzare? –

risposta

1

Come per servizio non dispone di interfaccia utente, è necessario avviare l'attività da esso per getWindow) attributo (..

O fare un'attività trasparente o semplicemente avviare l'attività, getWindow() e subito finirlo. Penso che tu debba fare un'attività trasparente. (Questa è la mia opinione personale)

+0

Grazie per la risposta. Ma non posso avviare Attività. Devo solo cambiare la modalità Completo <-> non pieno in servizio. –

+0

Se si desidera ottenere l'attributo Window, penso comunque che si debba usare Activity .. – user370305

0

Quello che stai cercando di fare, ritengo, è che il servizio segnali che è necessario apportare una modifica all'aspetto di un'attività. Il modo per farlo è che il servizio trasmetta un intent utilizzando Context.sendBroadcast(Intent) e che la tua attività risponda nel suo metodo onReceive. La risposta accettata in this thread contiene ulteriori dettagli su come impostarla.

6

Si non è possibile ottenere una finestra in un servizio. Ma tu puoi usare WindowManager per aggiungere una vista (root) come già fatto.

E È inoltre possibile aggiornare la vista attraverso updateViewLayout, è possibile modificare lo stato della finestra (tipo di finestra, bandiera, x, y, w, h, gravità, ecc ...) come sotto i codici.

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

come ottenere mRootView? –

+1

@quicklearner mRootView è la tua istanza di visualizzazione che avresti precedentemente aggiunto tramite mWindowManager.addView() – alfongj

Problemi correlati