Android百度地图开发-个性化地图
最近做了一款app软件,需要接入百度地图,然后要求自定义地图上的文字和图标样式,发现百度地图上有个个性化地图的功能,然后就看了一下,发现也不算难,就是有些地方感觉说的不是很详细。
怎么使用百度地图个性化地图
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/custommap 设置官网的地址
地图上的元素属性生成的json并不需要一个一个敲上去,官网有个工具,因为这个在官网上的没有做太明显的标注,我这里截图,因为我一开始都没有看到有这个工具。
注意:这个工具不太好用,很多属性在编辑工具里面怎么修改,生成的json就是不变,需要自己查下面的元素表,然后在生成的json里面去手动改里面的属性值。
- 从个性化编辑工具里编辑好需要的地图样式,然后下载下来json文件 ;
- 将下载下来的文件保存到app项目的assets文件夹中;
- 调用文件工具类里面这个方法 ;
1. 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);}
}
- 最好在Application里面调用 ;
1. 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”);}
}
- Activity里面如何做我就不写了,这个官网写的很清楚了,定位功能,在清单文件配置权限不起作用,或者发现等位不准,一直都在大海上,可能就需要你加上运行时权限了;
1. /**
• 检查定位权限方法
*/
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);
}}
- 启动Activity的时候调用MapView.setMapCustomEnable(true);就OK了 ;
- 注意,关键点来了:就是在页面销毁的时候一定要关闭个性化地图,不然反复打开几次应用一定会报错。 ;
- 在onDestroy方法里面调用MapView.setMapCustomEnable(false);就OK了