2016-04-23 6 views
2

Ich möchte Power button press event in meiner App erfassen und das auch in einem Service, die im Hintergrund läuft. Dazu habe ich folgenden Code mit Broadcast Receiver verwendet.Erfassen Ereignis, wenn Power-Taste für 3 Sekunden gedrückt wird oder 3 Mal innerhalb Service

private static final String ACTION="android.intent.action.SCREEN_ON"; 
private BroadcastReceiver yourReceiver; 

OnReceive() Methode:

final IntentFilter theFilter = new IntentFilter(); 
    theFilter.addAction(ACTION); 
    this.yourReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Do whatever you need it to do when it receives the broadcast 
      // Example show a Toast message... 
      Log.d("button","button pressed"); 
      Toast.makeText(context,"pressed",Toast.LENGTH_LONG).show(); 
     } 
    }; 

Mit diesem Code ich in der Lage bin Schaltfläche drücken Ereignis innerhalb Empfänger zu erfassen.

Jetzt möchte ich erkennen, dass, ob Power-Taste für 3 oder mehr Sekunden gedrückt wurde dann möchte ich bestimmte Aktion in meinem Empfänger durchführen. Dazu fand ich diese Methode aus

@Override 
public boolean onKeyLongPress(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_POWER) { 
     // Do something here... 
     return true; 
    } 
    return super.onKeyLongPress(keyCode, event); 
} 

Aber ich fand heraus, dass diese Methode nur innerhalb einer Aktivität läuft, aber ich will es in einem Dienst rufen.

Gibt es eine Möglichkeit festzustellen, ob der Netzschalter 3 Sekunden lang gedrückt wurde, oder ob wir die obige Methode im Service verwenden können.

Antwort

0

Es gibt keine Möglichkeit, das zu tun, "ohne ein komplettes Chaos" nativ in Android, und die Chancen, dass Sie etwas falsch machen, wenn Sie das tun müssen, sind hoch wie in der Service-Dokumentation angegeben Anwendungskomponente, die entweder den Wunsch einer Anwendung darstellt, eine länger andauernde Operation auszuführen, während sie NICHT mit dem Benutzer interagiert ". Die Servicekomponente soll nur für Aufgaben mit langen Aufgaben gedacht sein, die keine Interaktion erfordern und überhaupt nicht von bestimmten Aktionen für andere Aktivitäten als Start und Stopp abhängig sind. Standardmäßig enthält der Service keine Eingabemethoden wie die, die Sie benötigen, sondern nur um Ihre Frage zu beantworten. Eine Möglichkeit besteht darin, den Dienst an eine Aktivität zu binden, die Dienstreferenz von der Aktivität abzurufen, eine Methode im Dienst zu implementieren und diese Methode dann aus Ihrer Aktivität auszuführen, wenn onKeyPress darin aufgerufen wird.

+0

Es ist eine Art Notfall-App, daher möchte ich meine App immer im Hintergrund laufen, daher verwende ich Service –

+0

Sie können dies nicht tun. :) –