Per rilevare quando è stato premuto il pulsante "Applicazioni recenti" è possibile utilizzare il Servizio di accessibilità.Dovrai eseguire il tuo servizio di accessibilità e ricevere eventi con tipo "TYPE_WINDOW_STATE_CHANGED" e controllare il nome della classe dell'evento.
- Leggi su Accessibility Service nello sviluppatore Android. Configura il tuo servizio di accessibilità, chiedi il permesso all'utente.
- Nella tua Accessibilità Servizio metodo di sostituzione
onAccessibilityEvent()
- In questo metodo si riceverà
AccessibilityEvent event
oggetto, questo oggetto contiene tutte le informazioni necessarie su un evento che si sono appena accaduto sul dispositivo.
Siamo interessati a ClassName. ClassName a volte può essere nullo quindi non dimenticare di! = Null check. nomi dei package di applicazioni recenti finestra varia a seconda della versione di Android:
- Android 4.1: "com.android.internal.policy.impl.RecentApplicationsDialog"
- Android 4,2-4,4: "com.android .systemui.recent.RecentsActivity"
- Android 5,0-7,1: "com.android.systemui.recents.RecentsActivity"("" lettera s è stato aggiunto)
non so il nome della classe per i dispositivi più vecchi ma non credo che qualcuno li mantiene nel 2017;)
in modo da avere qualcosa di simile:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() != AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED || event.getClassName() == null)
return;
String className = String.valueOf(event.getClassName());
if (className.equals("com.android.internal.policy.impl.RecentApplicationsDialog")
|| className.equals("com.android.systemui.recent.RecentsActivity")
|| className.equals("com.android.systemui.recents.RecentsActivity")){
//Recent button was pressed. Do something.
}
}
ho testato sui seguenti dispositivi reali: LG, Nexus, Sony e virtuale dispositivi: Motorola, Samsung.
Se qualcuno conosce un'eccezione per questi nomi di classe, per favore mandami un messaggio.
fonte
2017-03-13 21:13:10
Questo non ha nulla a che fare con l'implementazione del pulsante. Questo è un difetto nel gioco la sua implementazione. – DroidBender
Ma funziona come dovrebbe quando esco dal gioco attraverso il pulsante "home" e poi lo inserisco nuovamente attraverso questo "windows-open" -button'. L'unica volta che funziona non è quando premo il tasto "windows-open" -button durante la partita, quindi premo subito la finestra per il gioco. Quindi deve essere una sorta di differenza nel modo in cui 'onPause()' e 'onResume()' viene chiamato qui rispetto a come vengono normalmente chiamati. –