Premetto che sto usando la libreria di
@moster67
(mi referisco alla pagina
https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo )
Nell'evento
acs_OnAccessibilityEvent(Event As Object, Node As Object), tramite "Node", riesco ad analizzare tutti gli elementi che costituiscono la schermata.
Usando JavaObject riesco ad accedere alle View, ed a estrarre tutte le proprietà che mi servono, quali, ad esempio:
For x = 0 To nodesCount - 1
Dim obj As JavaObject = nodes.RunMethodJO("get", Array As Object(x)) ' get the node
Dim ViewId As String = obj.RunMethod("getViewIdResourceName", Null).As(String)
Dim ClassName As String = obj.RunMethod("getClassName", Null).As(String)
Dim isClickable As Boolean = obj.RunMethod("isClickable", Null).As(Boolean)
Dim text As String = obj.RunMethod("getText", Null).As(String)
......... analisi dell'elemento
Next
Come vedi c'è la proprietà
isClickable che mi dice se l'oggetto che sto analizzando è cliccabile.
Se è cliccabile nessun problema, faccio
obj.RunMethod("performAction", Array As Object(AccServConstants.ACTION_CLICK))
e funziona perfettamente
Sul mio telefono con
Android 12, faccio
acs.PerformGlobalAction(AccServConstants.GLOBAL_ACTION_POWER_DIALOG)
per aprire la schermata di spegnimento, analizzo la schermata, quando trovo isClickable = True e text = "Spegni", eseguo il click, mi si apre la seconda schermata, faccio la stessa analisi, faccio click e funziona perfettamente, il telefono si spegne da solo.
Ma su un telefono
Android 8, quando appare la schermata di spegnimento, analizzandola non c'è nessun oggetto isClickable, sebbene ho trovato tutti gli oggetti regolarmente, anche quello con il text = "Spegni".
Se provo comunque a fare il ACTION_CLICK su quell'oggetto non succede nulla, non è proprio cliccabile da accessibility_service
Ecco il perchè mi piacerebbe capire come poter fare un touch su un punto qualsiasi dello schermo semplicemente passandogli le coordinate.
Il codice java che avevo postato è corretto ?
Perchè la funzione dispatchGesture mi ritorna True ma in realtà non ha fatto nulla ??