应用程序无法在锁定的屏幕上工作

时间:2018-02-23 15:04:02

标签: android android-studio service background android-wake-lock

我正在创建一个需要跟踪用户正在做的很多事情的应用程序。这一切都需要在后台中进行,并且需要持续运行。提到两个:使用google活动API持续跟踪活动,使用google的地理围栏API跟踪位置。

我为我正在跟踪的每个参数创建了一个(Intent)服务,一切进展顺利。即使您终止应用程序,服务也会在后台重新启动并按预期执行。

我的问题:一旦我锁定手机,就会停止跟踪。一旦我点亮我的屏幕或解锁它再次工作。

注1:我正在使用一个主要服务来控制感知参数的所有其他(意图)服务。 (我不确定这是否是最佳方式,或者我是否应该创建一项大型服务?...)。

我尝试过的是 PARTIAL_WAKE_LOCK 以保持唤醒我的主要服务控制所有其他服务。这没用。我还尝试使用PARTIAL_WAKE_LOCK来唤醒感知参数的服务。这也不起作用。

注意2:我知道这不应该在实际应用中完成,但这是必须的。这是一个实验应用程序,永远不会进入Playstore。此外,还将通知所有用户将在实验过程中跟踪哪些内容以及如何影响他们的电池。

 @Override
public void onCreate() {
    super.onCreate();
    ...
    PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
            "MyWakelockTag");

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    if (! keepCPUOn){
        wakeLock.acquire();
        keepCPUOn = true;

    }
}

清单:

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

非常感谢!

3 个答案:

答案 0 :(得分:0)

我也在创建像你这样的app。在后台和UI屏幕中进行位置跟踪工作并不会锁定。在你开始位置服务的UI屏幕中,请将下面的代码放在那个java文件中。

enter code here

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_current_ride_new);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
            "MyWakelockTag");

    wakeLock.acquire();
}

这段代码非常适合我。

答案 1 :(得分:0)

从Android 6及其新的打盹模式开始,唤醒锁定不会阻止设备进入睡眠模式,忽略它们

建议的解决方案:您的服务需要是前台服务,它应该调用startForeground()并显示不可忽略的通知,您还需要获取部分唤醒锁。

答案 2 :(得分:0)

我刚刚在我的手机Android 4.4的设置中将我的应用程序添加到了受保护的应用程序中(此功能允许在关闭屏幕后继续运行)