【问题标题】:Application not working on locked screen应用程序无法在锁定屏幕上运行
【发布时间】:2018-02-23 15:04:01
【问题描述】:

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

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

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

注意 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" />

非常感谢!

【问题讨论】:

  • 你试过AlarmManager。查看thisJBA的解决方案
  • @Melchizedek,没有找到那个解决方案。会尽快尝试并发布我的发现!
  • 好的,很高兴为您提供帮助。

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


【解决方案1】:

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

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

【讨论】:

  • 是的,我也考虑过前台服务。这确实可以完美地工作。但是,用户没有不断提醒它正在被跟踪是很重要的。由于前台服务需要持续通知,因此这并不是我真正需要的。谢谢你的建议!
  • 我在这个问题上做了很多工作,据我所知这是唯一的解决方案。
【解决方案2】:

我也在创建像你这样的应用程序。位置跟踪在后台工作,UI 屏幕不会锁定。您在哪个 UI 屏幕中启动定位服务,请将以下代码放入该 java 文件中。

@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();
}

这段代码非常适合我。

【讨论】:

  • 如果手机永远无法关闭屏幕,这不是很耗电吗?
  • 为了避免进入睡眠模式总是会消耗电池,并且这个答案中提出的解决方案不适用于 Android 6.0 或更高版本
  • 还有一个问题,我在跟踪时没有使用任何 UI。用户可以从任务管理器中删除应用程序,并且我已经覆盖了 onTaskRemove 以便它重新启动应用程序(仅处理所有跟踪的服务而不是主 UI 屏幕)。应用程序的主要目标是尽可能少的用户输入(只有一个开始和停止按钮)。我可以使用前台服务,但总是有通知挂在那里告诉用户他正在被跟踪。这可能会改变他的行为方式,因此不适合实验。再次感谢您的帮助!
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多