androidwakelock_如何使Android WakeLock正常工作?

androidwakelock_如何使Android WakeLock正常工作?如何使AndroidWakeLock正常工作?我的WakeLock不能使我的设备保持唤醒状态。在mWakeLock中,我得到了:PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE);mWakeLock=pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK|…

如何使Android WakeLock正常工作?

我的WakeLock不能使我的设备保持唤醒状态。

在mWakeLock中,我得到了:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, “My Tag”);

mWakeLock.acquire();

然后:

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();

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

mWakeLock是先前这样声明的字段:

private PowerManager.WakeLock mWakeLock;

我的设备使用Android 1.6。 我非常感谢您为解决此问题提供的帮助。

Curyous asked 2020-06-21T09:49:47Z

13个解决方案

106 votes

WakeLock通常不会导致重新启动问题。 您的编码中可能还有其他问题。WakeLock会消耗大量电池,如果使用后没有释放电池。

WakeLock是使屏幕保持打开状态的一种低效方式。 而是使用WindowManager来做魔术。 下面的一行足以满足WakeLock的要求。WakeLock权限也需要此项才能起作用。同样,此代码比wakeLock更有效。

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

您无需手动释放WakeLock。 此代码将允许Android系统自动处理锁定。 当您的应用程序位于前景中时,将保持WakeLock,否则android系统会自动释放Lock。

试试这个,发表您的评论…

Anoop CH answered 2020-06-21T09:50:19Z

50 votes

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

wf. answered 2020-06-21T09:50:38Z

23 votes

您只需要编写以下代码:

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

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

现在,您的活动将始终保持清醒状态。您可以根据需要执行其他操作,例如w1.release()。

Maverick answered 2020-06-21T09:51:08Z

7 votes

如下所示,在onFinish()中添加权限

最好在您的onFinish()声明标签之前,但在标签之后,之后,尝试使您的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”);

}

然后在您的onFinish()方法位置

@Override

public void onResume() {

mWakeLock.aquire();

}

并在您的onFinish()方法中

@Override

public void onFinish() {

mWakeLock.release();

}

CharlieNorris answered 2020-06-21T09:51:41Z

6 votes

要实现相同的程序设计,您可以使用以下代码

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

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

android:keepScreenOn=”true”

您可以从以下网址获得详细信息[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);

Sunil Kumar Sahoo answered 2020-06-21T09:52:14Z

6 votes

保持萤幕开启

第一种方式:

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

第二种方式:

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:keepScreenOn=”true”>

保持CPU处于打开状态:

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);

WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, “MyWakelockTag”);

wakeLock.acquire();

要释放唤醒锁,请致电wakelock.release()。这会将您的主张释放给CPU。 请务必在应用程序使用完后立即释放唤醒锁,以免耗尽电池。

文档在这里。

Beyaz answered 2020-06-21T09:53:00Z

2 votes

我有个类似的问题。 我可以让屏幕保持打开状态,但是如果我使用了部分唤醒锁并且关闭了屏幕,则在打开屏幕之前不会调用我的onFinish函数。

首先,您可以使用mWakeLock.isHeld()检查唤醒锁,以确保获得它。 最简单的方法是将其添加到代码中,在调试器中为其设置断点,然后进行检查。

就我而言,我明白了,但是部分唤醒锁似乎没有做任何事情。 这是我的屏幕暗锁的工作代码。

protected void setScreenLock(boolean on){

if(mWakeLock == null){

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK |

PowerManager.ON_AFTER_RELEASE, TAG);

}

if(on){

mWakeLock.acquire();

}else{

if(mWakeLock.isHeld()){

mWakeLock.release();

}

mWakeLock = null;

}

}

附录:

Droid Eris和DROID用户向我报告说,尽管它在我的G1上正常运行,但在他们的设备上不起作用。 您在什么设备上测试? 我认为这可能是Android错误。

Brock Tice answered 2020-06-21T09:53:38Z

2 votes

感谢您的关注。我一直在花5分钟的时间在代码中实现Timer来进行一项活动,这一直很困难,因为我的手机已设置为2分钟左右关闭屏幕/处于睡眠状态。 有了以上信息,看来我已经可以解决此问题。

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

/* Time Lockout after 5 mins */

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

Timer timer = new Timer();

timer.schedule(new TimerTask() {

public void run() {

Intent i = new Intent(AccountsList.this, AppEntryActivity.class);

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(i);

finish();

return;

}

}, 300000);

/* Time Lockout END */

}

Steven Bennett answered 2020-06-21T09:53:59Z

2 votes

android开发人员网站的示例代码段

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

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

}

后台作业的最佳做法

Sree Rama answered 2020-06-21T09:54:23Z

2 votes

{PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE);

WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,”MyWakeLock”);

wakeLock.acquire();}

使用此代码,别忘了在Android清单中允许唤醒锁

Tugadar answered 2020-06-21T09:54:43Z

1 votes

在准备释放它之前,请确保没有意外清理newWakeLock。 如果完成,则释放锁。 例如,如果将其设置为null并随后运行垃圾收集器,则会发生这种情况。 如果不小心设置了同名的局部变量而不是方法级变量,也可能发生这种情况。

我还建议检查LogCat以查找具有PowerManagerService标记或您传递给newWakeLock的标记的条目。

Emdot answered 2020-06-21T09:55:08Z

1 votes

创建唤醒锁时,请尝试使用ACQUIRE_CAUSES_WAKEUP标志。ON_AFTER_RELEASE标志只是重置活动计时器,以使屏幕保持更长的时间。

[HTTP://developer.Android.com/reference/Android/OS/power manager.HTML#acquire_causes_wakeup]

Archit answered 2020-06-21T09:55:33Z

0 votes

在AndroidManifest.xml中添加权限:

然后在my.xml中添加代码:

android:keepScreenOn=”true”

在这种情况下将永远不会关闭页面!你可以阅读更多

Mortreza AD answered 2020-06-21T09:56:02Z

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35278.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注