Oreo-背景定位服务运动追踪器

时间:2018-09-12 13:24:37

标签: android location android-location android-8.0-oreo location-services

首先,我想指出的是,我已经在堆栈溢出,android文档和其他站点上做了很多研究,但是我仍然没有找到解决方案。

我需要您的帮助,以了解如何使我的SportTracker服务在android> = O中在后台运行。 实际上,我使用以下命令将服务作为粘性前台服务启动:

Intent intent = new Intent(mContext, SmanAppLocationSerivce.class);
intent.putExtra(RequestCode.AgentService,RequestCode.START_SPORT_NOTIFICATION);
startForegroundService(intent);

我会为您服务:

public void onCreate() {

    super.onCreate();

    mLocationRequest = LocationRequest.create()
            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
            .setFastestInterval(Project.TIME_GPS_UPDATE_FAST)
            .setInterval(Project.TIME_GPS_UPDATE)ì;



    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();

}

onStartCommand 方法中,我 startForeground 服务。

onLocationChanged 中,我需要计算从开始,距离到现在的时间,并将新位置保存到db,以便在保存运动会话并将它们发送到服务器时可以全部获取。< / p>

我还需要使用计时器每秒更新进行中的通知,以便显示会话时间和会话距离。

(最好的例子是我可以针对您的预期行为向您展示 Runtastic运动

实际上,一切正常,如果我停止活动,该服务将继续按照他的预期运行,但是当手机进入睡眠状态(我想进入打mode模式)时,该服务将被系统终止。

我尝试了以下解决方案:

  • 我尝试每n秒设置一次警报,以检查该服务是否处于活动状态,并(如果该服务已死)重新启动它。不起作用,似乎警报甚至被系统杀死(即使使用 setExactAndAllowWhileIdle
  • 尝试将广播接收器用于 ACTION_SCREEN_OFF ACTION_SCREEN_ON ,因此我可以在屏幕关闭时停止通知更新的计时器,并在screen_on上重新启动以显示新数据(不起作用
  • 试图对位置请求使用不同的优先级( PRIORITY_BALANCED_POWER_ACCURACY 而不是 PRIORITY_HIGH_ACCURACY )。有时服务可以幸存,有时他会被杀死,但是定位点的准确性非常低,并且由于我正在跟踪运动项目,因此我需要高精度
  • 我试图让用户忽略我的应用程序的电池优化,该应用程序通过 Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS 重定向到设置视图。 即使该应用程序忽略电池优化,该服务(高精度)在休眠模式下也被杀死。

有人对如何解决这个问题有了想法? 也许只需要以​​我不知道与O一起工作的某种模式来完成。

谢谢大家 再见

更新

我仍然没有找到我想要的东西(U2 :))。我最终要求用户在受保护的应用列表上手动设置该应用,以便电源管理器不会将其杀死。

您可以在这里"Protected Apps" setting on Huawei phones, and how to handle it

找到一些有用的信息

0 个答案:

没有答案