Android 设备上的 PowerManager.WakeLock

2024-01-14

我正在尝试在我的 Android 应用程序中实现 WakeLock。我的 onCreat() 中有以下代码:

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

第二行导致崩溃。它抛出致命异常。据我所知,Android 说第一个参数没有有效的唤醒锁级别。但在开发者网站上建议使用 FLAG_KEEP_SCREEN_ON 所以我有点困惑(http://developer.android.com/reference/android/os/PowerManager.html#newWakeLock%28 int,%20 java.lang.String%29 http://developer.android.com/reference/android/os/PowerManager.html#newWakeLock%28int,%20java.lang.String%29)

我是否必须使用已弃用的 PowerManager.FULL_WAKE_LOCK ?

按照问题中的建议,以下代码如何让 Android WakeLock 工作? https://stackoverflow.com/questions/2039555/how-to-get-an-android-wakelock-to-work,在我看来这不是正确的方法。

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

我不需要为洞应用程序唤醒。该应用程序是乐器调音器,仅应在调音器运行时保持唤醒状态。计划是在 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 in newWakeLock().

该应用程序是乐器调音器,仅应在调音器运行时保持唤醒状态。计划是在 startTuner() 方法中调用 myWakeLock.acquire() ,在 stopTuner() 方法中调用类似的 myWakeLock.release() 。我不知道如何用建议的方式实现这一点。

Call setKeepScreenOn(true)一些View当您想让屏幕保持唤醒状态时,请在调谐器 UI 中使用。称呼setKeepScreenOn(false)一些View当您希望恢复正常的屏幕行为时,在调谐器 UI 中。在这些调用之间,只要您的调谐器 UI 位于前台,屏幕就不会关闭。作为奖励,您不需要WAKE_LOCK允许。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 设备上的 PowerManager.WakeLock 的相关文章

随机推荐