关于android:App切换到后台后如何保持持续定位

40次阅读

共计 2756 个字符,预计需要花费 7 分钟才能阅读完成。

为了爱护用户隐衷,大多数利用只会在前台运行时获取用户地位,当利用在后盾运行时,定位性能会被禁止。这就导致 APP 在后盾或者锁屏时无奈失常记录 GPS 轨迹,这对打车、共享出行、跑步等须要实时记录用户轨迹的利用影响十分大,甚至影响了利用外围性能的应用体验。那对于这些利用的开发者来说,如何在用户被动受权地位信息后,让利用在后盾运行时长时间放弃继续定位呢?

HMS Core 定位服务提供后盾继续定位的能力,在获取用户被动受权的状况下可长久记录地位信息,实用于记轨迹录场景。

一、交融定位 - 后盾定位实现办法

  1. 利用运行设施为非华为手机
  2. 应用 LocationCallback 开启定位之后,当利用切到后盾之后,定位将会很快进行。
  3. 为了让利用切到后盾之后,定位能力仍旧无效,所以能够应用 enableBackgroundLocation 办法创立一个前台服务,用以进步利用在后盾的地位更新频率。
  4. 后盾定位自身不具备定位能力,后盾定位须要和 LocationCallback 开启的定位一起应用。定位获取的数据须要在 LocationCallback 对象中的 onLocationResult(LocationResult locationResult) 办法中获取。

二、注意事项:

  1. 反对的设施为非华为手机
  2. 利用须要取得定位权限,且必须为“始终容许”
  3. 利用不可被设施中的省电精灵等控电利用解冻,以 vivo 手机为例:关上 i 管家 - 后盾耗电治理 - 找到利用 - 把智能控电改成容许后盾高耗电。

三、测试 Demo 时的注意事项:

  1. 测试时设施最好不要是充电状态,充电状态下利用可能不会被控电。
  2. 能够通过状态栏是否有 定位图表判断 设施以后是否在进行定位。以 vivo 手机为例:vivo 手机定位开启时状态栏会展现一个定位图标,如果不开启后盾定位的话利用切后盾 定位图标会隐没。开启后盾定位能力之后,利用切后盾定位图标还是存在的。

四、实现后盾定位性能集成步骤

  1. 在 AndroidManifest.xml 中增加后盾定位服务
<service
    android:name="com.huawei.location.service.BackGroundService"
    android:foregroundServiceType="location" />
  1. (可选)在 Android 9 及以上版本中,为保障后盾定位权限的失常应用,须要在“AndroidManifest.xml”文件中配置 FOREGROUND_SERVICE 权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
  1. 创立 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;
    }
}
  1. 初始化 FusedLocationProviderClient 对象
FusedLocationProviderClient mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
  1. 开启后盾定位
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 最新技术资讯~

正文完
 0