2011-01-14 9 views
5

Desidero rilevare "inattività utente" nella mia app Android. Per essere più precisi: voglio rilevare se l'utente NON ha fatto alcuna interazione con la mia app (toccando lo schermo, scorrendo, inserendo testi ...) per un tempo specifico. Tecnicamente uso un timer che viene resettato su ciascuna interazione (utente).Android: Rileva input tastiera utente inattività/Rileva (softkeyboard)

Nella mia attività, ho l'override del metodo onUserInteraction per rilevare le interazioni, come lo scorrimento, toccando lo schermo ...

@Override 
public void onUserInteraction(){ 
    resetInactiveTimer(); 
} 

Purtroppo, onUserInteraction non è chiamato quando l'utente interagisce con la tastiera virtuale. Penso che la ragione sia che la tastiera non fa parte della mia attività.

Per i testi di modifica nella mia app che uso TextWatcher e la OnTextChanged metodo che funziona bene. Ma la mia app contiene anche una WebView che carica pagine web arbitrarie. Ovviamente alcune pagine Web potrebbero contenere campi di input e non so come rilevare che l'utente interagisce con la tastiera virtuale per modificare quei campi di testo.

risposta

1

Ancora interessato a questo?

La vostra attività implementa KeyEvent.Callback, in modo da poter ignorare onKeyDown:

@Override 
public boolean onKeyDown (int keyCode, KeyEvent event) { 
    resetInactiveTimer(); 
    return false; 
} 

In alternativa, (nella circostanza più comune), se si preme il tasto con il cursore in una EditText o simili, è necessario implementare un OnKeyListener e utilizzare il metodo onKey per chiamare resetInactiveTimer();

+0

I metodi di input non sono necessari per inviare eventi chiave. Infatti, il softkey jelly bean non invia alcun evento chiave quando viene premuto backspace. –

+0

Ma qui il problema è che onUserInteraction non viene chiamato quando si sta digitando in edittext. Inoltre, se voglio usare onKeyDown o onKey, devo impostare key press listener per ogni edittext. C'è qualche opzione generale in cui posso tenere traccia di qualsiasi evento keypress dalla tastiera virtuale? – Smeet