

App切换到后台后如何保持持续定位? - HMSCore技术团队
source link: https://www.cnblogs.com/hmscore/p/16593808.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

为了保护用户隐私,大多数应用只会在前台运行时获取用户位置,当应用在后台运行时,定位功能会被禁止。这就导致APP在后台或者锁屏时无法正常记录GPS轨迹,这对打车、共享出行、跑步等需要实时记录用户轨迹的应用影响非常大,甚至影响了应用核心功能的使用体验。那对于这些应用的开发者来说,如何在用户主动授权位置信息后,让应用在后台运行时长时间保持持续定位呢?
HMS Core定位服务提供后台持续定位的能力,在获取用户主动授权的情况下可持久记录位置信息,适用于记轨迹录场景。
一、融合定位-后台定位实现方法
-
应用运行设备为非华为手机
-
使用LocationCallback开启定位之后,当应用切到后台之后,定位将会很快停止。
-
为了让应用切到后台之后,定位能力依旧有效,所以可以使用enableBackgroundLocation方法创建一个前台服务,用以提高应用在后台的位置更新频率。
-
后台定位本身不具备定位能力,后台定位需要和LocationCallback开启的定位一起使用。定位获取的数据需要在 LocationCallback对象中的onLocationResult(LocationResult locationResult) 方法中获取。
二、注意事项:
-
支持的设备为非华为手机
-
应用需要获得定位权限,且必须为“始终允许”
-
应用不可被设备中的省电精灵等控电应用冻结,以vivo手机为例:打开i管家-后台耗电管理-找到应用-把智能控电改成允许后台高耗电。
三、测试Demo时的注意事项:
-
测试时设备最好不要是充电状态,充电状态下应用可能不会被控电。
-
可以通过状态栏是否有 定位图表判断 设备当前是否在进行定位。以vivo手机为例:vivo手机定位开启时状态栏会展示一个定位图标,如果不开启后台定位的话应用切后台 定位图标会消失。开启后台定位能力之后,应用切后台定位图标还是存在的。
四、实现后台定位功能集成步骤
- 在AndroidManifest.xml中添加后台定位服务
<service
android:name="com.huawei.location.service.BackGroundService"
android:foregroundServiceType="location" />
- (可选)在Android 9及以上版本中,为保证后台定位权限的正常使用,需要在“AndroidManifest.xml”文件中配置FOREGROUND_SERVICE权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
- 创建Notification对象
public class NotificationUtil {
public static final int NOTIFICATION_ID = 1;
public static Notification getNotification(Context context) {
Notification.Builder builder;
Notification notification;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
String channelId = context.getPackageName();
NotificationChannel notificationChannel =
new NotificationChannel(channelId, "LOCATION", NotificationManager.IMPORTANCE_LOW);
notificationManager.createNotificationChannel(notificationChannel);
builder = new Notification.Builder(context, channelId);
} else {
builder = new Notification.Builder(context);
}
builder.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Location SDK")
.setContentText("Running in the background ")
.setWhen(System.currentTimeMillis());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
notification = builder.build();
} else {
notification = builder.getNotification();
}
return notification;
}
}
- 初始化FusedLocationProviderClient对象
FusedLocationProviderClient mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
- 开启后台定位
private void enableBackgroundLocation() {
mFusedLocationProviderClient
.enableBackgroundLocation(NotificationUtil.NOTIFICATION_ID, NotificationUtil.getNotification(this))
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
LocationLog.i(TAG, "enableBackgroundLocation onSuccess");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
LocationLog.e(TAG, "enableBackgroundLocation onFailure:" + e.getMessage());
}
});
}
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
Recommend
-
25
本报驻澳大利亚特派记者 刘天亮 本报记者 张雪婷“中国企业仍然会以某种方式参与澳大利亚的5G建设。”澳大利亚《悉尼先驱晨报》13日以此为题报道称,虽然澳政府8月颁
-
38
老师老师,这题我会!!这问题不就是为孟鹤堂的《大保镖》入成了《论捧逗》而准备的吗?整个入错了活,最…
-
52
过去腾讯一直在讲双轮驱动的竞争力,就是充分发挥微信等基础设施对流量和用户的先天影响,辅以投资或并购,把别人的梦想固化在自己的战车上,进而加固对整个生态链的影响力。
-
22
2020年美国大选,川普失败了,拜登胜利了。在川普的四年任期当中,美国政府对中国可谓恶意满满: 不但大打出手,打起了中美贸易...
-
8
“国标”出台后,思摩尔还能重回市值四千亿吗 电子烟市场解禁,不会像资本期待的那么快。 一则市场“传言”直接点燃了沉寂许久的电子烟市场。11月12日,有电子烟企业晒出邀请函,称受国家烟草专卖局《电子烟》国标项目组邀请,参加...
-
7
在总销售超过9000万台后,任天堂表示Switch仅到了服役中期
-
2
开始的开始,再看一遍视频吧!第一,策略要特别清晰,目标要特别明确去年8月,接到凯迪拉克CT4重新包装「人生第一台后驱车」的Brief。字数越少,难度越大,理清Brief后发现:如何将人生第一台后驱车与新生代产生关...
-
5
无论是在生活场景还是工作场景,文案都是我们沟通的重要桥梁。B 端的设计体系,包含设计价值观、设计原则、设计模式、组件库、样式指南等。文案则属于设计模式的一个重要组成部分。
-
8
明星纷纷为NFT站台后,周星驰也有意追赶Web3与元宇宙风潮 记者/司林威 近日,久未露面的香港影星周...
-
2
卖家进入OTTO平台后不可自拔,真香!传播跨境知识 建立学习社群 分享高端资源 成就卖家梦想14小时前217TO MY FRIEND跨境电商的多渠...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK