​​​​​​​Android 8.0后台定位,后台持续定位,无法获得定位的问题。需用户手动开启权限。

问题:最近在开发中遇到一个需求,要求应用无论如何都要能在后台上传用户的实时位置。但是在Android8.0 的手机上连上电源可以上传,不连电源,GPS定位小图标一会就没了。然后也就获取不到位置信息, 导致不能上传。在网上搜索了 很久,发现跟多人都遇到了这个问题。但是都无法解决。

 

原因:Android 8.0系统增加了很多新特性,对位置影响较大的特性就是增强了对后台定位的限制,详细信息请参考:

https://developer.android.com/about/versions/oreo/background-location-limits.html

Android 8.0系统为实现降低功耗,无论应用的目标SDK版本为多少,Android 8.0系统都会对后台应用获取用户当前位置的频率进行限制,只允许后台应用每小时接收几次位置更新。

 

解决:好吧!原来是这个原因,找到了原因得解决啊。 各大地图平台,高德、百度都提供了解决方案,但是我测试了下,有些手机可以,有些手机不可以,我的荣耀的Android8.0就不行。并没有什么作用。后来实在不知道怎么办,既然这个不能代码实现,那就只能退而求其次,祈祷应用管理能有相关的设置了。于是就点进了应用的详情页面。点了每一个能点的地方。还真的发现了,原来在应用详情电池、电量、耗电等相关的设置中。有一个后台活动的开关。开启后就可以了,只是后台运行时会被提示后台耗电。哎!总算是找到一种解决办法。不过感觉这东西是不是又跟白名单有关,这就不知道了,喝茶...思考...。

如果有其他好的方法,希望猿友们。能在下面分享一波。接受批评指教,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android 8.0 及以上版本,为了增强应用程序的安全性,Android 引入了后台限制,禁止未在前台运行的应用程序启动服务。如果您想在后台启动服务,要使用 `startForegroundService()` 方法。这个方法会启动一个前台服务,然后你可以在服务启动后在通知栏显示一个通知,以此来告知用户服务正在运行。 以下是一个使用 `startForegroundService()` 的示例代码: ``` if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 创建一个 NotificationChannel NotificationChannel channel = new NotificationChannel("channel_id", "channel_name", NotificationManager.IMPORTANCE_DEFAULT); // 向系统注册 NotificationChannel NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannel(channel); } // 创建一个 Intent,启动你的服务 Intent serviceIntent = new Intent(this, YourService.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 在 Android 8.0 及以上版本上,要调用 startForegroundService() 方法启动服务。 startForegroundService(serviceIntent); } else { // 在 Android 8.0 以下版本上,可以直接调用 startService() 方法启动服务。 startService(serviceIntent); } ``` 注意:如果你使用的是 `startForeground()` 方法,会在 Android 8.0 及以上版本上抛出 `IllegalStateException` 异常,因为 Android 8.0 及以上版本禁止在后台启动服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值