2015-02-15 10 views
5

Sto scrivendo un AccessibilityService e voglio creare sovrapposizioni di visualizzazione sulle viste dall'attività corrente che il servizio di accessibilità può recuperare. Non ho problemi a recuperare tutti gli oggetti AccessibilityNodeInfo dall'attività corrente, ma non ho idea di come ottenere le viste da questi oggetti per creare sovrapposizioni. Purtroppo ci sono solo alcuni esempi riguardanti i servizi di accessibilità. Forse alcuni di voi hanno già esperienza con questo argomento. Spero che puoi aiutarmi! Grazie!Ottieni visualizzazione di AccessibilityNodeInfo per creare overlay

EDIT: Un documento mostra che le sovrapposizioni oltre i contenuti di visualizzazione di un'attività sono possibili:

La sovrapposizione display è in grado di eseguire queste attività grazie alla Android Accessibility quadro [10]. Utilizzando l'API accessibilità, esso è in grado di accedere e controllare il layout GUI delle applicazioni sullo schermo, senza richiedere modifiche o la strumentazione del codice dell'applicazione "*

Link:. http://www.onarlioglu.com/publications/fc2015babelcrypt.pdf

page 6 e 8. Grazie!

+1

Recupera i limiti sullo schermo da 'AccessibilityNodeInfo'. Converti in coordinate relative ai limiti sullo schermo dell'overlay. Disegna sul tuo overlay. – alanv

risposta

3

non è possibile ottenere gli View oggetti da altre applicazioni, come gli View oggetti sono in un processo separato dalla vostra.

+0

Grazie per la risposta veloce! Ma come è possibile creare sovrapposizioni di viste sugli oggetti della vista? So che questo deve essere possibile, perché ho letto un articolo a riguardo. La GUI dell'attività è stata attraversata tramite il Servizio di accessibilità e quindi è stata creata la visualizzazione degli overlay. – zuuurek

+0

@zuuurek: "Ma come è possibile creare sovrapposizioni di viste sugli oggetti vista?" - Non ho idea di cosa intendi con questo. "So che questo deve essere possibile, perché ho letto un articolo a riguardo" - hai un link? – CommonsWare

+0

Vedere la mia modifica. Grazie! – zuuurek

0

Disegnare le sovrapposizioni sulla finestra utilizzando i servizi di accessibilità è facile. So che questa è una domanda vecchia, ma ho pensato di aggiungere comunque la risposta.

RelativeLayout relativeLayout = new RelativeLayout(getContext()); 

WindowManager.LayoutParams topButtonParams = new WindowManager.LayoutParams(
    width, //The width of the screen 
    height, //The height of the screen 
    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
    PixelFormat.TRANSLUCENT); 

//Just trust me, this alpha thing is important. I know it's weird on a "translucent" view. 
topButtonParams.alpha = 100; 

relativeLayout.setLayoutParams(topButtonParams); 

mWindowManager.addView(relativeLayout, topButtonParams); 

Inoltre, è necessario questa autorizzazione nel vostro manifesto

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

Una volta che hai un invisibile relativo layout di overlay sopra la parte superiore dello schermo intero, aggiungendo vista ad essa è facile!