平板电脑处于待机状态时,我的 GPS 应用程序是不是可以继续在后台运行?

Posted

技术标签:

【中文标题】平板电脑处于待机状态时,我的 GPS 应用程序是不是可以继续在后台运行?【英文标题】:Is it possible for my GPS application to continue running in the background while the tablet is on standby?平板电脑处于待机状态时,我的 GPS 应用程序是否可以继续在后台运行? 【发布时间】:2021-08-09 09:20:16 【问题描述】:

我创建了一个生成 android 设备位置跟踪日志的应用程序。 GPS 坐标会定期记录并存储在设备上以供以后下载。目前,当手机进入待机状态时,程序会停止记录点。有没有一种方法可以让应用程序在设备处于待机状态时继续记录位置?提前致谢。

【问题讨论】:

【参考方案1】:

根据androiddocumentation,如果您的应用程序的目标API 级别为26 或更高,当应用程序本身不在前台时,系统会对运行后台服务施加限制。此外,为了在后台访问位置,您可能需要额外的 permissions

如果您想在后台运行始终处于活动状态的服务,您可以run a foreground service 显示持续通知。或者您可以使用WorkManager 安排任务。

【讨论】:

【参考方案2】:

我找到了两个解决方案。 1.) 使用唤醒锁

public void wakeLock() 
         PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
         PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyApp::MyWakelockTag");
        wakeLock.acquire();
    

在清单 XML 文件中添加以下内容,

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

或者,2.) 使用 WindowManager 保持设备唤醒,

 public void noSleep() 
        if (bNoSleep == true)
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
         else if (bNoSleep != true)
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        

我选择后者作为用户可选择的功能,可通过主工作区中的复选框访问。我还将它设置为在启动跟踪日志时自动参与,用户可以选择禁用它并允许待机/睡眠发生。我确实实现了唤醒锁,但有一些问题可能与我的某些 Android 设备上的自定义 ROM 有关。这就是为什么我最终选择了 windowmanager 解决方案。

【讨论】:

以上是关于平板电脑处于待机状态时,我的 GPS 应用程序是不是可以继续在后台运行?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何检查iphone是不是处于待机模式?

使用 Qt 判断 PC 是不是退出待机状态

为啥我的 shell 脚本在后台处于待机状态,直到我把它带回前台?

如何在设备休眠时保持 GPS 处于全功率状态

笔记本如何在合上盖子后再打开时显示登录界面,而不是待机状态

Google Cloud Messaging 是不是会向处于待机模式的设备发送消息?