如何使用PowerManager和PARTIAL_WAKE_LOCK

时间:2013-12-18 11:33:14

标签: android

我开发了一个小应用程序,当设备处于睡眠状态或深度睡眠状态时,这个应用程序必须始终运行(按右键关闭屏幕)我阅读了很多关于它的帖子,并告诉我方法是使用PowerManager,我的问题是如果我使用这个命令,我的结构是> myActivity.class,ReceiverBoot.class和ServiceBoot.class,我在myActivity.class上使用POwerManager类,如下所示:

PowerManager mgr = (PowerManager)this.getSystemService(Context.POWER_SERVICE);
PowerManager wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP , "MyWakeLock");

之后的onCreateMethod

wakeLock.acquire();

之后我有一个

super.onCreate(savedInstanceState);
this.mTimer.scheduleAtFixedRate(
                new TimerTask(){
                    @Override
                    public void run(){doTask();}
                } , 0, 1000);

wakeLock.release();

关于Manifest XML代码

<uses-permission android:name="android.permission.WAKE_LOCK" />

和布局XML代码

android:keepScreenOn="true"

但是到10seg后,creen es总是关闭,但是应用程序正在运行,但是有wifi无效。

应用程序与wifi conn工作得非常好,但是当改为3G conn时,应用程序已经不见了,我用这个命令很好吗?问题是互联网的那种连接???非常感谢!

1 个答案:

答案 0 :(得分:1)

我不是100%明确你的问题。无论是数据问题,还是屏幕问题。 (或者,如果您正在尝试修复数据问题,那么屏幕问题是什么?)。

对于屏幕

您没有使用正确的锁来打开屏幕。 PARTIAL_WAKE_LOCK仅请求您可以使用处理器。要保持应用中的屏幕,请使用SCREEN_DIM_WAKE_LOCKSCREEN_BRIGHT_WAKE_LOCKFULL_WAKE_LOCK中的一个,具体取决于您的需求。只要您需要锁定,就应该保持此锁定。目前您正在onCreate()中发布它。请记住,如果用户按下电源按钮,但锁被释放(PARTIAL是例外)。

如果您的目的只是在视图处于活动状态时保持屏幕开启,那么最好不要使用锁定。唤醒锁需要额外的许可。您可以将此添加到onCreate覆盖:

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

这与使用android:keepScreenOn="true"的效果相同,您似乎已经这样做了。但是,我无法说明为什么这不适用于你的片段。确保你正在膨胀正确的布局。

对于您的数据

当屏幕未激活(并且不存在锁定)时,设备可能会关闭3G数据。同样,如果你需要它,请不要释放你的锁(虽然不要永远保留它,这只会吸收手机电池)。