2011-01-17 10 views
13

Prima di oggi avrei detto che non è possibile, per avere un'app che viene sovrapposta a tutto il resto: schermata iniziale, app, dialer, ecc.App per Android che viene eseguita su TUTTE le altre app?

Se si prova l'applicazione gratuita "Super Manager" fa esattamente questo. Ha un'icona e una schermata simile a un widget che apparirà sempre e ovunque. Mentre l'icona o il widget è sullo schermo, puoi comunque interagire con l'app in esecuzione dietro di esso.

Come è possibile e come possiamo ricreare questa funzionalità?

Aggiornamento: Ecco alcune immagini di esso in azione. Puoi vedere l'applicazione sovrapposta come una piccola freccia sopra Dolphin. Quindi quando lo premi puoi vedere l'applicazione in esecuzione come un tipo di widget di grandi dimensioni. Anche se il widget è attivo, puoi comunque interagire con l'app in background. In questo esempio il delfino è l'app di sfondo.

Image 1

alt text

+0

Che ne dici di una descrizione migliore o di uno screenshot. – Falmarri

+1

Ho aggiunto alcune schermate. Non so come spiegarlo meglio però. È un'applicazione che viene eseguita per essere eseguita su tutte le altre applicazioni. – pcm2a

risposta

6

vedere questo:

Creating a system overlay window (always on top)

Controllare la sezione dei commenti della risposta accettata. Troverai il link ad un progetto di esempio di lavoro.

EDIT == ==

Link to the project

+0

L'esempio che citi funziona quasi. L'onTouch viene attivato anche per l'overlay E l'applicazione in esecuzione dietro di esso. Ad esempio, premendo l'overlay che si trova sopra un'icona si attiva l'icona dietro di essa. Nell'esempio Super Manager l'attività in esecuzione non viene attivata. – pcm2a

+0

Si prega di collegarsi direttamente al progetto di esempio, il vice ci manda in una caccia all'oca selvaggia! –

+0

@RubberDuck: collegamento aggiunto. Solo una nota, ho intenzione di aggiornare quel progetto la prossima settimana. Inserirò il link del progetto aggiornato qui. In realtà devo aggiornare per un altro progetto su cui sto lavorando. –

4

questo può essere fatto da una combinazione di cose. Il pulsante iniziale viene creato creando una finestra di tipo TYPE_SYSTEM_OVERLAY. Queste finestre non possono ottenere lo stato attivo, tuttavia puoi utilizzare FLAG_WATCH_OUTSIDE_TOUCH per ottenere eventi di tocco e abbinare le coordinate per capire che sei stato toccato.

Analogamente, c'è http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT (E TYPE_SYSTEM_DIALOG).

Infine, è possibile creare un'attività con http://developer.android.com/reference/android/R.style.html#Theme_Translucent (o varianti).

+0

Come si ottiene l'attività traslucida per consentire l'interazione con un'applicazione separata in esecuzione dietro di esso? Quando ho creato un'attività popup, non è stato possibile toccare l'attività sottostante.Nell'app sopra l'applicazione in esecuzione può ancora essere interagita con. Ad esempio il browser dei delfini può ancora scorrere mentre il Super Manager ha la sua attività in cima. – pcm2a

+0

Penso che tu voglia un SYSTEM_ALERT con FLAG_NOT_TOUCH_MODAL invece di un'attività traslucida quindi –

5

A partire da Android 4.x, team di Android team di Android risolto un potenziale problema di sicurezza con l'aggiunta di una nuova funzione adjustWindowParamsLw() in cui aggiungerà FLAG_NOT_FOCUSABLE , FLAG_NOT_TOUCHABLE e rimuovi i flag FLAG_WATCH_OUTSIDE_TOUCH per la finestra TYPE_SYSTEM_OVERLAY.

Questa finestra TYPE_SYSTEM_OVERLAY non riceverà alcun evento di tocco sulla piattaforma ICS e, naturalmente, l'utilizzo di TYPE_SYSTEM_OVERLAY non è utilizzabile su ICS o sui dispositivi futuri.

Aggiornamento: 2016/5/4 TYPE_TOAST non può ricevere eventi di tocco su Android 4.0 ~ 4.3. È lo stesso di TYPE_SYSTEM_OVERLAY. Su Android 4.4+, TYPE_TOAST è stato rimosso dall'elenco escluso, quindi puoi anche utilizzare TYPE_TOAST per ricevere eventi di tocco su dispositivi Android 4.4+.

+1

hai ragione, sostituisci TYPE_SYSTEM_OVERLAY con TYPE_PHONE funzionerà su ICS. –

Problemi correlati