문제

내 Android 앱에 WakeLock을 구현하려고 합니다.onCreat()에 다음 코드가 있습니다.

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

충돌로 이어지는 두 번째 줄.치명적인 예외가 발생합니다.내가 볼 수 있는 한 Android에서는 첫 번째 인수가 유효한 wake lock 수준이 아니라고 말합니다.하지만 개발자 사이트에서는 FLAG_KEEP_SCREEN_ON을 사용하는 것이 권장되므로 약간 혼란스럽습니다(http://developer.android.com/reference/android/os/PowerManager.html#newWakeLock%28int,%20java.lang.String%29)

더 이상 사용되지 않는 PowerManager.FULL_WAKE_LOCK을 사용해야 합니까?

질문에서 제안한 다음 코드 Android WakeLock을 작동시키는 방법은 무엇입니까? , 제 생각에는 올바른 방법이 아닙니다.

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

구멍 앱에 대한 Wakeup이 필요하지 않습니다.이 앱은 악기용 튜너이며 튜너가 실행 중일 때만 활성 상태를 유지해야 합니다.계획은 startTuner() 메서드에서 myWakeLock.acquire()를 호출하고 stopTuner() 메서드에서 유사한 myWakeLock.release()를 호출하는 것입니다.제안 된 방법으로 그것을 실현하는 방법을 모르겠습니다.

전체 예외 메시지는 다음과 같습니다.

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
도움이 되었습니까?

해결책

그러나 개발자 사이트에서는 FLAG_KEEP_SCREEN_ON을 사용하는 것이 좋습니다.

그것은 다음을 가리키는 말이다. 사용의 대안 WakeLock, UI의 일부가 포그라운드에 있는 동안 단순히 화면을 켜두는 것이 목표인 경우.

더 이상 사용되지 않는 PowerManager.FULL_WAKE_LOCK을 사용해야 합니까?

그것은 당신이 무엇을 하려는지에 달려 있습니다.해당 상수 중 하나를 사용해야 합니다. PowerManager ~에 newWakeLock().

이 앱은 악기용 튜너이며 튜너가 실행 중일 때만 활성 상태를 유지해야 합니다.계획은 startTuner() 메서드에서 myWakeLock.acquire()를 호출하고 stopTuner() 메서드에서 유사한 myWakeLock.release()를 호출하는 것입니다.제안 된 방법으로 그것을 실현하는 방법을 모르겠습니다.

부르다 setKeepScreenOn(true) 어떤 것에는 View 화면을 깨우고 싶을 때 튜너 UI에서.부르다 setKeepScreenOn(false) 어떤 것에는 View 정상적인 화면 동작을 재개하려는 경우 튜너 UI에서.호출 사이에 튜너 UI가 전면에 있는 한 화면은 꺼지지 않습니다.보너스로 WAKE_LOCK 허가.

다른 팁

int PROXIMITY_WAKE_LOCK = 32;
PowerManager mgr=(PowerManager) getSystemService(Context.POWER_SERVICE);
proximityWakeLock = mgr.newWakeLock(PROXIMITY_WAKE_LOCK, "Beam");
.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top