Android百度地图开发-自定义地图的使用和坑

Android百度地图开发-个性化地图

最近做了一款app软件,需要接入百度地图,然后要求自定义地图上的文字和图标样式,发现百度地图上有个个性化地图的功能,然后就看了一下,发现也不算难,就是有些地方感觉说的不是很详细。

怎么使用百度地图个性化地图

http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/custommap 设置官网的地址
地图上的元素属性生成的json并不需要一个一个敲上去,官网有个工具,因为这个在官网上的没有做太明显的标注,我这里截图,因为我一开始都没有看到有这个工具。
注意:这个工具不太好用,很多属性在编辑工具里面怎么修改,生成的json就是不变,需要自己查下面的元素表,然后在生成的json里面去手动改里面的属性值。
个性化地图在官网上的位置
如何使用个性化编辑工具

  1. 从个性化编辑工具里编辑好需要的地图样式,然后下载下来json文件

  2. 将下载下来的文件保存到app项目的assets文件夹中

  3. 调用文件工具类里面这个方法

  4. public class FileUtils {
    /**

    • 设置个性化地图config文件路径
      */
      public static void setMapCustomFile(Context context, String PATH) {
      FileOutputStream out = null;
      InputStream inputStream = null;
      String moduleName = null;
      try {
      //“customConfigdir/” +
      inputStream = context.getAssets()
      .open(PATH);
      byte[] b = new byte[inputStream.available()];
      inputStream.read(b);
      moduleName = context.getFilesDir().getAbsolutePath();
      File f = new File(moduleName + “/” + PATH);
      if (f.exists()) {
      f.delete();
      }
      f.createNewFile();
      out = new FileOutputStream(f);
      out.write(b);
      } catch (IOException e) {
      e.printStackTrace();
      } finally {
      try {
      if (inputStream != null) {
      inputStream.close();
      }
      if (out != null) {
      out.close();
      }
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      MapView.setCustomMapStylePath(moduleName + “/” + PATH);

    }
    }

  5. 最好在Application里面调用

  6. public class MyApplication extends Application {
    /**

    • 初始化方法
      */
      @Override
      public void onCreate() {
      super.onCreate();
      baiduMapCutm();
      //在使用SDK各组件之前初始化context信息,传入ApplicationContext
      //注意该方法要再setContentView方法之前实现
      SDKInitializer.initialize(getApplicationContext());

    }
    private void baiduMapCutm() {
    这个方法第二个参数为assets文件里面保存的json文件,如果有后缀名(如text.json)
    怕你看不到我这个描述,我就没有注释,自己注释一下我的描述吧。
    FileUtils.setMapCustomFile(getApplicationContext(), “text.json”);

    }
    }

  7. Activity里面如何做我就不写了,这个官网写的很清楚了,定位功能,在清单文件配置权限不起作用,或者发现等位不准,一直都在大海上,可能就需要你加上运行时权限了;

  8. /**

    • 检查定位权限方法
      */
      private void checkPermession() {
      //下面是动态获取权限代码
      //如果 API level 是大于等于 23(Android 6.0) 时
      //判断是否具有权限
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
      //判断是否需要向用户解释为什么需要申请该权限
      if (ActivityCompat.shouldShowRequestPermissionRationale(this,
      Manifest.permission.ACCESS_COARSE_LOCATION)) {
      Toast.makeText(this, “百度地图定位需要打开定位权限”, Toast.LENGTH_SHORT).show();
      }
      //请求权限
      ActivityCompat.requestPermissions(this,
      new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
      }

    }

  9. 启动Activity的时候调用MapView.setMapCustomEnable(true);就OK了

  10. 注意,关键点来了:就是在页面销毁的时候一定要关闭个性化地图,不然反复打开几次应用一定会报错。

  11. 在onDestroy方法里面调用MapView.setMapCustomEnable(false);就OK了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值