【Android 后台持续定位】

news2024/12/26 23:17:07

最近工作中遇到了一个涉及后台持续性定位的问题。这里做一下总结:随着Android版本的条件,Google对后台服务管控的也是越来越严格。 这时有的小伙伴会说了,开启一个service然后把服务和通知关联一下变成前台服务,不就行了!这样做的话,只要app不被手动的销毁,前台服务会一直存活。没错,确实是这样!
我们在前台服务中引入定位功能后,定位间隔3s一次,通过日志打印,不管我们是挂起app或者手机锁屏,定位日志都会一直打印。到这里我们会觉得没什么问题呀,这不挺正常的嘛!
可是有过此类似经验的小伙伴会知道,虽然会一直定位,但是定位的坐标发生了变化(偏移)。app长时间后台挂起或者锁屏,第三方sdk(百度,高德)的定位服务,出现了严重定位偏差。发现此问题后,分别查阅了百度和高德开发文档,相关资料如下:

百度地图文档

在这里插入图片描述

高德文档

请添加图片描述

分别尝试了文档中的方法,很遗憾仍然未能解决长时间后台挂起或者锁屏,出现定位偏差问题。
再次查阅资料,发现由于手机厂商电池优化等原因,限制了锁屏后定位,联网等操作。小米手机截图:
请添加图片描述
当我尝试选择 无限制 选项后,是的,和你预想的一样,不管app挂起时间有多长,锁屏时间有多长,app都能 精度 很高的进行定位,再没有出现定位偏差。说到定位精度,我们不得不提一下这个参数,百度或者高德地图定位成功后,除了返回坐标还有定位精度这个关键参数。此值越小说明定位精度越高,也就是定位越准确。
来来来,我们不要扯太远,哈哈。
这时有的小伙伴会说了,这种方法看着确实不错,但是不同手机厂商界面应该是不一样的吧,那我们通过什么方法,引导用户跳转到这个界面让用户选择呢?
方法如下:

1:判断是否已打开省电策略白名单

@RequiresApi(api = Build.VERSION_CODES.M)
public  boolean isIgnoring(Activity activity) {
    boolean isIgonring = false;
    PowerManager manager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
    if (null != manager) {
        isIgonring = manager.isIgnoringBatteryOptimizations(activity.getPackageName());
    }

    return isIgonring;
}

2:弹出打开省电策略白名单的选项,确定就好了

public void goSetting(Context mContext) {
 Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);//ACTION_APPLICATION_DETAILS_SETTINGS
    Uri uri = Uri.fromParts("package", mContext.getPackageName(), null);
    intent.setData(uri);
        mContext.startActivity(intent);
 
}

注意:小米手机亲测可以跳转到设置界面,其他机型并未亲测。

放到最后想说的话:相信很多小伙伴看过不少app保活文章,有说双进程,双服务相互拉起保活的,有说1个像素点保活的,有说系统白名单,有说定时唤醒CPU的等等。建议大家还是不要耗费太多精力在这方法的研究上,试想一下,如果所有的Android开发人员都去这样做,都想保活自家的app,会是一个什么样的生态圈。Android系统会永远不如苹果系统流畅和省电等。如果我是一家安卓手机厂商的负责人,也会通过不同的手段去遏制此类事情发生。


参考文章:
关于使用系统定位持续后台定位的一点心得

android定位权限适配看这篇就够了

BDLocation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

steam/csgo搬砖,2023年最暴利的项目

这个项目赚钱主要来源于两个地方: 1.比如说今天美元的汇率是1美元6.8人民币,那我们有特定的渠道能拿到1美元5.0-5.5左右人民币的价格,100美元的汇率差利润就有180元左右的利润,当然这个价格是根据国际的汇率上下会有浮动的。 2.…

什么是极速文件传输,极速文件传输如何进行大文件传输

当谈到大文件传输时,人们总是担心大数据文件的大小以及将它们从一个位置交换到另一个位置需要多长时间。由于数据捕获高分辨率视频和图像的日益复杂,文件的大小不断增加。数据工作流在地理上变得越来越分散。在一个位置生成的文件在其他位置处理或使用。…

晚上适合做什么副业?靠自己的劳动赚钱最光荣

对于大多数普通人来说,晚上的空闲时间是很多的,但是却总是在手机上打游戏、刷视频而白白度过了一晚上。其实最近几年来很多朋友都想利用晚上的时间做一些副业,因为当下的工资已经满足不了自己的需求,再加上生活方方面面的压力&…

【swagger2】开发api文档

文章目录一、swagger2 简介背景Open API ???swagger2的作用swagger2常用工具组件:二、Springfox三、springBoot使用swagger2(简单示例)四、Swagger-UI使用五、配置文件1、配置类:给docket上下文配置api描述信息2、配置类&#…

净现值、投资回收期例题讲解

净现值概念净现值(NPV):指今后某年的Y元相当于今年的X元。需要关注两个概念:利率:利率是指借款、存入或借入金额(称为本金总额)中每个期间到期的利息金额与票面价值的比率。贴现率(D…

微软Bing的AI人工只能对话体验名额申请教程

微软Bing 免费体验名额申请教程流程ChatGPT这东西可太过火了。国外国内,圈里圈外都是人声鼎沸。微软,谷歌,百度这些大佬纷纷出手。连看个同花顺都有GPT概念了,搞技术,做生意的看来都盯上了 流程 下面就讲一下如何申…

Python3遍历文件夹提取关键字及其附近字符

要求: 1,遍历文件夹下所有的.xml文件 2,从.xml文件中提取关键字以及左右十个字符 3,输出到excel 一:遍历文件夹找到所有xml文件及其路径 for root, dirs, files in os.walk(self.inputFilePath):for file in files:…

靓号管理-搜索

搜索手机号: 最后一条就是使用的关键mobile__contains 使用字典: 后端的逻辑: """靓号列表"""data_dict {}search_data request.GET.get(q, "")# 根据关键字进行搜索,如果关键字存在&…

综合项目 旅游网 【5.旅游线路收藏功能】

分析判断当前登录用户是否收藏过该线路当页面加载完成后,发送ajax请求,获取用户是否收藏的标记根据标记,展示不同的按钮样式编写代码后台代码RouteServlet/*** 判断当前登录用户是否收藏过该路线*/ public void isFavorite(HttpServletReques…

.md文件上传视频的踩坑经历小记

分别用QQ录制了前后两个视频&#xff0c;并利用video标签引用。这两个视频&#xff0c;明明代码一样&#xff0c;偏偏就一个成功&#xff0c;一个失败。 代码如下&#xff1a; <!-- 能够成功显示mp4视频 --> <video src"/images/video/2020110411.mp4" co…

海卡和海派有什么区别

一、海卡和海派有什么区别 海派和海卡实际上就是快船和慢船的区别。都是头程选用海运的方式&#xff0c;海派是到海港海关清关拆柜后&#xff0c;尾程配送是采用快递配送。而海卡则是到海港海关清关拆柜后&#xff0c;尾程选用货车配送。1、海派比较适用于小件货物 海派是海运抵…

OPenCV库移植到ARM开发板子上面配置过程

步骤一 1&#xff0c;环境准备去下载opencv官方的源码。 我这里用的是opencv-4.5.5版本的 2&#xff0c;还需要交叉编译工具一般&#xff0c;你交叉编译的工具板子厂家会提供工具&#xff0c;最好还是用板子厂家提供的交叉编译工具&#xff0c;因为我之前编译试过其他的交叉…

第一章:unity性能优化之内存优化

目录 前言 unity性能优化之内存的优化 一、unity Analysis工具的使用。 二、内存优化方法 1、设置和压缩图片 2、图片格式 3、动画文件 4、模型 5、RenderTexture&#xff08;RT&#xff09; 6、分辨率 7、资源的重复利用 8、shader优化 9、对bundle进行良好的管…

数字三角形

题目描述上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;你的任务就是找到最大的和。路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外&…

RK3399平台开发系列讲解(文件系统篇)虚拟文件系统的数据结构

🚀返回专栏总目录 文章目录 一、超级块二、挂载描述符三、文件系统类型四、索引节点五、目录项沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍虚拟文件系统的数据结构。 一、超级块 文件系统的第一块是超级块,用来描述文件系统的总体信息。当我们把文件系…

【论文速递】Arxiv2018 - 加州伯克利大学借助引导网络实现快速、准确的小样本分割

【论文速递】Arxiv2018 - 加州伯克利大学借助引导网络实现快速、准确的小样本分割 【论文原文】&#xff1a;Few-Shot Segmentation Propagation with Guided Networks 【作者信息】&#xff1a;Kate Rakelly∗ Evan Shelhamer∗ Trevor Darrell Alexei Efros Sergey Levine …

源码深度解析Spring Bean的加载

在应用spring 的过程中&#xff0c;就会涉及到bean的加载&#xff0c;bean的加载经历一个相当复杂的过程&#xff0c;bean的加载入口如下&#xff1a; 使用getBean&#xff08;&#xff09;方法进行加载Bean&#xff0c;最终调用的是AbstractBeanFactory.doGetBean() 进行Bean的…

Hudi-基本概念(时间轴、文件布局、索引、表类型、查询类型、数据写、数据读、Compaction)

文章目录基本概念时间轴(TimeLine)文件布局&#xff08;File Layout&#xff09;Hudi表的文件结构Hudi存储的两个部分Hudi的具体文件说明索引&#xff08;Index&#xff09;原理索引选项全局索引与非全局索引索引的选择策略对事实表的延迟更新对事件表的去重对维度表的随机更删…

23岁去培训机构学习Java可以成功吗?

当然是可以的&#xff01; 23岁这么美好的年纪&#xff0c;要是小课重回23岁&#xff0c;一定好好学习&#xff0c;努力克服一切困难障碍。可惜是没有时光机器可以穿梭到过去。所以你在这么美好的年纪&#xff0c;有自己喜欢想学习的专业一定要好好学习&#xff0c;天天向上&a…

DVWA之文件上传

一、概念&#xff1a;指由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马&#xff0c;病毒&#xff0c;恶意脚本或者WebShell等。“文件上传”本身没有问题&…