Frage

ich versuche, ein WakeLock in meiner Android-App zu implementieren.Ich habe den folgenden Code in meinem onCreat():

pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
myWakeLock = pm.newWakeLock(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,"WakeLock for Tuner");

Die zweite Zeile führt zu einem Absturz.Es löst eine fatale Ausnahme aus.Soweit ich sehen kann, sagt Android, dass das erste Argument keine gültige Wecksperrstufe ist.Aber auf der Entwicklerseite wird empfohlen, FLAG_KEEP_SCREEN_ON zu verwenden, damit ich ein bisschen verwirrt bin (http://developer.android.com/reference/android/os/PowerManager.html#newWakeLock%28int,%20java.lang.String%29)

Muss ich den veralteten PowerManager verwenden.FULL_WAKE_LOCK ?

Der folgende Code, wie in der Frage vorgeschlagen Wie bekomme ich ein Android WakeLock zum Laufen? , ist meiner Meinung nach nicht der richtige Weg.

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

Ich brauche kein Aufwachen für die ganze App.Die App ist ein Stimmgerät für Instrumente und sollte nur wach bleiben, wenn das Stimmgerät läuft.Der Plan ist, myWakeLock zu nennen.acquire() in der startTuner() -Methode und analogem myWakeLock .release() in der stopTuner() -Methode.Ich kann das mit dem vorgeschlagenen Weg nicht realisieren.

Hier ist die vollständige Ausnahmemeldung:

04-13 19:21:14.815: E/AndroidRuntime(9452): FATAL EXCEPTION: main
04-13 19:21:14.815: E/AndroidRuntime(9452): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.benediktbock.ffttest/de.benediktbock.ffttest.MainActivity}: java.lang.IllegalArgumentException: Must specify a valid wake lock level.
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2249)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2299)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.access$700(ActivityThread.java:154)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.os.Looper.loop(Looper.java:137)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.main(ActivityThread.java:5306)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at java.lang.reflect.Method.invokeNative(Native Method)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at java.lang.reflect.Method.invoke(Method.java:511)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at dalvik.system.NativeStart.main(Native Method)
04-13 19:21:14.815: E/AndroidRuntime(9452): Caused by: java.lang.IllegalArgumentException: Must specify a valid wake lock level.
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.os.PowerManager.validateWakeLockParameters(PowerManager.java:488)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.os.PowerManager.newWakeLock(PowerManager.java:474)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at de.benediktbock.ffttest.MainActivity.onCreate(MainActivity.java:62)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.Activity.performCreate(Activity.java:5255)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
04-13 19:21:14.815: E/AndroidRuntime(9452):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2213)
04-13 19:21:14.815: E/AndroidRuntime(9452):     ... 11 more
War es hilfreich?

Lösung

Auf der Entwicklerseite wird jedoch empfohlen, FLAG_KEEP_SCREEN_ON zu verwenden

Das bezieht sich auf eine alternative zur Verwendung von WakeLock, wenn Ihr Ziel einfach darin besteht, den Bildschirm eingeschaltet zu lassen, während ein Teil Ihrer Benutzeroberfläche im Vordergrund steht.

Muss ich den veralteten PowerManager verwenden.FULL_WAKE_LOCK ?

Das würde davon abhängen, was Sie versuchen zu tun.Sie müssen eine dieser Konstanten verwenden auf PowerManager in newWakeLock().

Die App ist ein Stimmgerät für Instrumente und sollte nur wach bleiben, wenn das Stimmgerät läuft.Der Plan ist, myWakeLock zu nennen.acquire() in der startTuner() -Methode und analogem myWakeLock .release() in der stopTuner() -Methode.Ich kann das mit dem vorgeschlagenen Weg nicht realisieren.

Nennen setKeepScreenOn(true) auf einigen View in Ihrer Tuner-Benutzeroberfläche, wenn Sie den Bildschirm wach halten möchten.Nennen setKeepScreenOn(false) auf einigen View in Ihrer Tuner-Benutzeroberfläche, wenn das normale Bildschirmverhalten fortgesetzt werden soll.Zwischen diesen Anrufen wird der Bildschirm nicht ausgeschaltet, solange sich Ihre Tuner-Benutzeroberfläche im Vordergrund befindet.Als Bonus brauchen Sie das nicht WAKE_LOCK Berechtigung.

Andere Tipps

generasacodicetagpre.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top