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

Is it possible for my GPS application to continue running in the background while the tablet is on standby?

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

根据androiddocumentation, if your app targets API level 26 or higher, the system imposes restrictions on running background services when the app itself isn't in the foreground. Also for accessing location in the background you may need additional permissions

你可以 with showing an ongoing notification if you want to run a service which is always alive in the background. Or you can schedule tasks using WorkManager.

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

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