如何让应用程序在后台保持清醒状态

时间:2017-02-05 22:16:26

标签: android wakelock

我编写了一个应用程序,它连接到蓝牙设备,用于前景中的汽车(在后台)和导航(或其他东西)。

但是在android 7+(也许还有6个)上,应用程序会在一段时间后进入睡眠状态。当我试图从相机拍照时,“睡眠模式”立即进入,我的应用程序现在正在睡觉(没有蓝牙连接,没有通知) - 只是死了应用程序。

我必须去最近的应用 - >点击我的应用程序,这使“醒来”。蓝牙现在再次连接到设备。

但我仍然无法检查应用程序是否正在睡眠。那么,如何在后台保持应用程序清醒呢?

我读了一些关于WakeLock的内容,但看起来它不起作用,导致app仍在睡觉。也许我错了。

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wk = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyWakeLock");
    wk.acquire();

和onDestroy

wk.release();

由于

4 个答案:

答案 0 :(得分:3)

从Android API 23开始,Google推出了Doze modeApp Standby以节省电池电量。当设备进入休眠模式或应用程序进入App Standby时,应用程序完成的所有任务都将延期。我们遇到了一个因为同样没有触发警报的问题。如果您阅读文档,您会发现使用唤醒锁也无济于事。

  

打盹限制以下限制适用于您的应用   在打瞌睡:

     

暂停网络访问。

     

系统忽略唤醒锁定。

     

标准的AlarmManager警报(包括setExact()和setWindow())是   推迟到下一个维护窗口。如果需要设置警报   在Doze中发生火灾时,请使用setAndAllowWhileIdle()或   setExactAndAllowWhileIdle()。使用setAlarmClock()设置的警报继续   正常启动 - 系统在警报发生前不久退出Doze   火。

     

系统不执行Wi-Fi扫描。

     

系统不允许同步适配器运行。系统不允许JobScheduler运行

因此,如果您想绕过所有这些,您的应用必须在前台拥有一个流程。再次来自同一个文档 -

  

该应用程序目前处于前台(作为一个进程)   活动或前台服务,或由其他活动使用或   前台服务)。

在您的情况下运行服务并将其优先级设置为前台。

答案 1 :(得分:1)

要使wakelock工作,你应该在开头将这一行添加到你的androidmanifest文件中。但正如Ajay所说,你应该使用一项服务,以便服务在后台工作并完成工作,但如果你想保持屏幕上的其他东西,我认为这不是这里的情况。

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

答案 2 :(得分:0)

为什么不使用服务? WakeLock基本上保持屏幕不是一种有效的机制

https://developer.android.com/training/scheduling/wakelock.html

答案 3 :(得分:0)

布局类型下的xml布局文件:

机器人:keepScreenOn = “真” &GT;