2011-01-14 14 views
5

Ich möchte "Benutzer Inaktivität" in meiner Android App erkennen. Um genau zu sein: Ich möchte feststellen, ob der Benutzer für eine bestimmte Zeit KEINE Interaktion mit meiner App gemacht hat (Berühren des Bildschirms, Scrollen, Eingabe von Texten ...). Technisch verwende ich einen Timer, der bei jeder (Benutzer-) Interaktion zurückgesetzt wird.Android: Benutzerinaktivität erkennen/Tastatureingabe (Softkeyboard) erkennen

In meiner Tätigkeit habe ich die onUserInteraction Methode überschreiben, um Wechselwirkungen zu erkennen wie Scrollen, den Bildschirm zu berühren ...

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

Leider ist onUserInteraction nicht aufgerufen, wenn der Benutzer mit der Soft-Tastatur interagiert. Ich denke der Grund ist, dass die Soft-Tastatur nicht Teil meiner Activity ist.

Für bearbeiten Texte in meiner app verwende ich TextWatcher und die OnTextChanged Methode, die gut funktioniert. Aber meine App enthält auch ein WebView, das beliebige Webseiten lädt. Natürlich könnten einige Webseiten Eingabefelder enthalten und ich weiß nicht, wie man erkennt, dass der Benutzer mit der Soft-Tastatur interagiert, um diese Textfelder zu bearbeiten.

Antwort

1

Noch interessiert?

Ihre Aktivität implementiert KeyEvent.Callback, so können Sie onKeyDown außer Kraft setzen:

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

Alternativ (im allgemeinsten Umstand), wenn der Schlüssel mit dem Cursor in einem EditText oder ähnlichem gedrückt wird, benötigen Sie ein Gerät OnKeyListener und verwenden Sie die onKey-Methode zum Aufrufen resetInactiveTimer();

+0

Eingabemethoden sind nicht erforderlich, um wichtige Ereignisse zu senden. In der Tat sendet Jelly-Beans-Softkeyboard kein Schlüsselereignis, wenn die Rücktaste gedrückt wird. –

+0

Aber hier Problem ist, dass OnUserInteraction nicht aufgerufen wird, wenn Sie in Editiertext eingeben. Auch wenn ich onKeyDown oder onKey verwenden möchte, muss ich den Listener auf jeden Edittext drücken. Gibt es eine allgemeine Option, mit der ich jedes Tastendruckereignis über die Soft-Tastatur verfolgen kann? – Smeet

Verwandte Themen