Domanda

Sto cercando di implementare un wakelock nella mia app Android. Ho il seguente codice nel mio OnCreat ():

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

la seconda linea che porta a un incidente. Getta un'eccezione fatale. Per quanto posso vedere Android afferma che il primo argomento non è un livello di blocco wake valido. Ma sul sito dello sviluppatore si consiglia di utilizzare flag_keep_screen_on quindi sono un bit di litte confuso ( http://developer.android.com/reference/android/os/powermanager.html#newwakelock%28int ,%20java.lang.String%29 )

Devo usare PowerManager.Full_Wake_Lock?

Il seguente codice, come suggerito nella domanda Come ottenere un Android Wakelock per lavorare? , non è il modo giusto a mio parere.

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
.

Non ho bisogno di una sveglia per l'app Hole. L'app è un sintonizzatore per strumenti e dovrebbe rimanere sveglio solo quando il sintonizzatore è in esecuzione. Il piano è quello di chiamare mywakelock.acquire () nel metodo Startuner () e mywakelock analogico.release () nel metodo StopTuner (). Non riesco a capire che con il modo suggerito.

Ecco il messaggio di eccezione completo:

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
.

È stato utile?

Soluzione

.

Ma sul sito sviluppatore si consiglia di utilizzare flag_keep_screen_on

che si riferisce a un'alternativa all'utilizzo di WakeLock , se il tuo obiettivo è semplicemente quello di mantenere lo schermo mentre alcuni dei tuoi ui sono in primo piano.

.

Devo usare PowerManager.Full_Wake_Lock?

che dipenderebbe da ciò che stai cercando di fare. Devi usare una di quelle costanti su PowerManager in newWakeLock().

.

L'app è un sintonizzatore per strumenti e dovrebbe rimanere sveglio solo quando il sintonizzatore è in esecuzione. Il piano è quello di chiamare mywakelock.acquire () nel metodo Startuner () e mywakelock analogico.release () nel metodo StopTuner (). Non riesco a capire che con il modo suggerito.

Chiama setKeepScreenOn(true) su alcuni View nell'interfaccia utente del sintonizzatore quando si desidera mantenere sveglio lo schermo. Chiama setKeepScreenOn(false) su alcuni View nell'interfaccia utente Tuner quando si desidera riprendere il comportamento normale dello schermo. Tra queste chiamate, fintanto che il tuo sintonizzatore ui è in primo piano, lo schermo non si spegne. Come bonus, non è necessario il permesso WAKE_LOCK.

Altri suggerimenti

int PROXIMITY_WAKE_LOCK = 32;
PowerManager mgr=(PowerManager) getSystemService(Context.POWER_SERVICE);
proximityWakeLock = mgr.newWakeLock(PROXIMITY_WAKE_LOCK, "Beam");
.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top