如何让Android WakeLock工作?

Cur*_*ous 47 android

我的WakeLock没有让我的设备保持清醒状态.

OnCreate()我有:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "My Tag");
mWakeLock.acquire();
Run Code Online (Sandbox Code Playgroud)

然后:

new CountDownTimer(1320000, 200) {

    public void onTick(long millisUntilFinished) {
        // I update a progress bar here.                                         
    }

    public void onFinish() {
        // I finish updating the progress bar.
        mWakeLock.release();
    }
}.start();
Run Code Online (Sandbox Code Playgroud)

计时器结束前屏幕关闭,如何让屏幕保持可见?

mWakeLock 是一个先前声明的字段:

private PowerManager.WakeLock mWakeLock;
Run Code Online (Sandbox Code Playgroud)

我的设备使用Android 1.6.我真的很感激任何帮助来解决这个问题.

Ano*_* CH 106

WakeLock通常不会导致重新启动问题.您的编码可能还有其他一些问题.如果在使用后没有释放,WakeLock会严重占用电池.

WakeLock是一种保持屏幕开启的低效方式.而是使用WindowManager来做魔术.以下一行就足够了WakeLock.为此,还需要WakeLock权限. 此代码也比wakeLock更有效.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

您无需手动重新启动WakeLock.此代码将允许Android系统自动处理锁定.当您的应用程序在Foreground中时,将保留WakeLock,否则android System会自动释放Lock.

试试这个并发表你的评论......

  • WindowManager.LayoutParams (5认同)
  • 我怀疑 `FLAG_KEEP_SCREEN_ON` 和唤醒锁是否相同,因为两者都有单独的功能,例如保持屏幕开启和保持 CPU 开启(屏幕关闭时)。可能如[此处](https://developer.android.com/training/scheduling/wakelock.html)所述。 (2认同)

wf.*_*wf. 50

您是否在您的清单中设置了所需的权限

<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)


Mav*_*ick 23

你只需写这个:

 private PowerManager.WakeLock wl;

    protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
            wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNjfdhotDimScreen");
    }//End of onCreate

            @Override
        protected void onPause() {
            super.onPause();
            wl.release();
        }//End of onPause

        @Override
        protected void onResume() {
            super.onResume();
            wl.acquire();
        }//End of onResume
Run Code Online (Sandbox Code Playgroud)

然后在清单文件中添加权限

 <uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)

现在你的活动将永远清醒.您可以w1.release()根据自己的要求做其他事情.


Cha*_*ris 7

添加权限AndroidManifest.xml,如下所示

<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)

最好在你的<application>声明标签之前,但在<manifest>标签之后,然后尝试让你的onCreate()方法只包含WakeLock实例.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
    mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "My Tag");
}
Run Code Online (Sandbox Code Playgroud)

然后在你的onResume()方法地方

@Override
public void onResume() {
   mWakeLock.aquire();
}
Run Code Online (Sandbox Code Playgroud)

并在你的onFinish()方法的地方

@Override
public void onFinish() {
   mWakeLock.release();
}
Run Code Online (Sandbox Code Playgroud)


Bey*_*yaz 7

保持萤幕开启

第一种方式:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

第二种方式:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">
    ...
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

保持CPU处于打开状态:

<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");
wakeLock.acquire();
Run Code Online (Sandbox Code Playgroud)

要释放唤醒锁,请致电wakelock.release()。这将使您向CPU提出索赔。请务必在应用程序使用完后立即释放唤醒锁,以免耗尽电池。

文档在这里


Sun*_*hoo 6

要实现相同的程序,您可以使用以下

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

或者在布局中添加以下内容也将执行上述任务

 android:keepScreenOn="true"
Run Code Online (Sandbox Code Playgroud)

您可以从以下网址http://developer.android.com/training/scheduling/wakelock.html获取详细信息

当键盘锁定时我使用了以下组合来唤醒我的屏幕并保持我的屏幕开启

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
Run Code Online (Sandbox Code Playgroud)