当前位置:   article > 正文

Android Studio调用百度地图(二):实现地图显示后台定位和步行导航_百度地图 行走轨迹后台运行

百度地图 行走轨迹后台运行

先看一下运行效果:

实现功能:后台定位+步行导航(可通过长按屏幕自定义终点,起点为定位点)
后台定位即当程序在后台时依旧执行定位功能,步行导航支持30米-50千米范围内的导航

一 导入SDK并配置相关信息

SDK下载和AK创建详见 Android Studio调用百度地图(一):注册成为百度地图开发者并下载SDK
SDK的导入具体可见百度地图官网

这里我要说的是实现定位和导航时需要注意的地方。
在proguard-rules.pro中添加

-dontoptimize
-ignorewarnings
-keeppackagenames com.baidu.**
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod

-dontwarn com.baidu.**
-dontwarn com.baidu.navisdk.**
-dontwarn com.baidu.navi.**

-keep class com.baidu.** {
    *; }
-keep interface com.baidu.** {
    *; }

-keep class vi.com.gdi.** {
    *; }

-dontwarn com.google.protobuf.**
-keep class com.google.protobuf.** {
    *;}
-keep interface com.google.protobuf.** {
    *;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在AndroidManifest.xml中添加
在这里插入图片描述

二 调用百度地图API实现后台定位和步行导航

1 实现后台定位核心代码

   // 定位初始化
 private void initLocationSDK() {
   
        mClient = new LocationClient(this);
        LocationClientOption mOption = new LocationClientOption();
        mOption.setScanSpan(5000);
        mOption.setCoorType("bd09ll");//设置坐标类型
        mOption.setIsNeedAddress(true);//设置是否需要地址信息,默认为无地址。
        mOption.setOpenGps(true);
        mClient.setLocOption(mOption);
        mClient.registerLocationListener(myLocationListener);
    }
    
   //开始后台定位
    private void settingLocInForeground() {
   
        //android8.0及以上使用NotificationUtils
        if (Build.VERSION.SDK_INT >= 26) {
   
            mNotificationUtils = new NotificationUtils(this);
            Notification.Builder builder2 = mNotificationUtils.getAndroidChannelNotification
                    ("适配android 8限制后台定位功能", "正在后台定位");
            notification = builder2.build();
        } else {
   
            //获取一个Notification构造器
            Notification.Builder builder = new Notification.Builder(DeleveryInfo.this);
            Intent nfIntent = new Intent(DeleveryInfo.this, DeleveryInfo.class);

            builder.setContentIntent(PendingIntent.
                    getActivity(DeleveryInfo.this, 0, nfIntent, 0)) // 设置PendingIntent
                    .setContentTitle("适配android 8限制后台定位功能") // 设置下拉列表里的标题
                    // .setSmallIcon(R.drawable.ic_launcher) // 设置状态栏内的小图标
                    .setContentText("正在后台定位") // 设置上下文内容
                    .setWhen(System.currentTimeMillis()); // 设置该通知发生的时间

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
   
                notification = builder.build(); // 获取构建好的Notification
            }
        }
        notification.defaults = Notification.DEFAULT_SOUND; //设置为默认的声音
        //开发者应用如果有后台定位需求,在退到后台的时候,为了保证定位可以在后台一直运行, 可以调用该函数,
        //会将定位SDK的SERVICE设置成为前台服务,适配ANDROID 8后台无法定位问题,其他版本下也会提高定位进程存活率
        //id - 为通知栏notifation设置唯一id,必须大于0
        //notification - 开发者自定义通知
        mClient.enableLocInForeground
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/297566?site
推荐阅读
相关标签
  

闽ICP备14008679号