Die vorhandenen Antworten beantworten die Frage nicht vollständig und lassen genug Details aus, dass sie ohne weitere Untersuchung nicht funktionieren werden. Ich werde teilen, was ich gelernt habe, das zu lösen.
Zuerst müssen Sie die folgende Berechtigung auf Ihre Manifest-Datei hinzufügen:
<uses-permission android:name="android.permission.PREVENT_POWER_KEY" />
kurze und lange drückt die folgenden Überschreibungen Aktivitätsklasse hinzufügen zu handhaben:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_POWER) {
// Do something here...
event.startTracking(); // Needed to track long presses
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_POWER) {
// Do something here...
return true;
}
return super.onKeyLongPress(keyCode, event);
}
Hinweis: Es ist Erwähnenswert ist, dass onKeyDown()
wird mehrere Male vor onKeyLongPress
feuern wird so möchten Sie möglicherweise auf onKeyUp()
statt oder andere Logik zu verhindern, auf eine Reihe von onKeyDown()
Anrufe zu reagieren, wenn der Benutzer rea ist Ich halte es nieder.
Ich denke, dieser nächste Teil ist nur für Cyanogenmod. Wenn die Konstante PREVENT_POWER_KEY nicht definiert ist, sollten Sie sie nicht benötigen.
So starten Sie den Einschaltknopf Sie das folgende Flag aus Ihrer Tätigkeit einstellen müssen Abfangen:
getWindow().addFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);
So stoppen Sie die Ein-Taste abfangen (so dass Standardfunktionalität):
getWindow().clearFlags(WindowManager.LayoutParams.PREVENT_POWER_KEY);
Sie wechseln hin und her zwischen den zwei Modi wiederholt in Ihrem Programm, wenn Sie wünschen.
Referenz: https://stackoverflow.com/a/10365166/2724418
Vielen Dank für Ihre Antwort. Aber Ihre Antwort funktioniert nur, wenn eine Aktivität ausgeführt wird. Meine Anforderung ist, wenn nur der Hintergrunddienst ausgeführt wird. – hal0360