-1

I have created an application that generates a tracklog of the Android devices location. A GPS coordinate is recorded at regular intervals and stored on the device for later download. Currently, when the phone goes on standby, the program stops recording points. Is there a method that would allow the application to continue documenting location while the unit is on standby? Thanks in advance.

4

2 回答 2

1

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

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

于 2021-05-20T08:27:57.613 回答
0

我找到了两个解决方案。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 解决方案。

于 2021-05-27T05:43:11.927 回答