显示地图
上一期,我们成功导入百度地图SDK,下来就需要验证我们导入的SDK和配置的环境代码是否正常,如果能在app上,显示出默认的百度地图界面,则证明导入和配置SDK成功,若不能显示,则说明配置有问题,需要仔细检查,看是否配置信息填写有误。
之前的文章已经申请了密钥并在项目的AndroidManifest.xml文件中进行了配置,同时也添加了权限声明。这里的申明只是针对于旧版本设备(API低),新版本需要手动动态申请权限才可以,否则无法使用百度地图相关服务。那么接下来就编写相关代码,实现百度地图默认地图的显示功能。
显示默认地图
当相关配置信息完成后,通过下面三步就可以显示出百度地图的默认地图。
- 1、在布局文件中添加地图容器
在你需要放置地图的视图中,添加地图标签,进行一些基本的设置,比如大小,间距等。
- 2、地图初始化操作
这里需要注意,下面两行代码,是在使用百度地图前必须提前声明的语句,因为它是作用是初始化百度地图SDK,如果不声明或者声明的地方不对,则后期百度地图无法成功加载。【我在这里就吃过亏,顺序写反了,一直调试不出来哪里出错了。】
初始化百度地图SDK
这两句代码,必须放在MainActivity的onCreate()方法中,在第一行进行声明,它们是进行百度地图SDK的初始化操作,第一个是传递上下文到SDK中,第二个设设置其SDK内部的坐标格式,默认为BD09LL坐标。(切莫将这两句放在程序刚开始执行的地方,否则后续无法使用百度地图)。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始化地图SDK //在使用SDK各组件之前初始化context信息,传入ApplicationContext SDKInitializer.initialize(getApplicationContext()); //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型. //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。 SDKInitializer.setCoordType(CoordType.BD09LL); setContentView(R.layout.activity_main); }
上面代码就是在这个测试项目中放置的位置。
- 3、创建地图Activity,管理其生命周期
在新建的testandroid工程中,在视图界面,创建MAP显示,接着在后台代码声明并定义Map的声明周期。其中需要注意的是,需要先进行初始化操作,其实需要动态申请访问许可,比如定位,存储卡等。
public class MainActivity extends AppCompatActivity { private MapView mMapView = null; private BaiduMap mBaiduMap=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始话地图SDK //在使用SDK各组件之前初始化context信息,传入ApplicationContext SDKInitializer.initialize(getApplicationContext()); //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型. //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。 SDKInitializer.setCoordType(CoordType.BD09LL); setContentView(R.layout.activity_main); //动态权限访问 SetPermissionVerify(); mMapView = (MapView) findViewById(R.id.map_view); } /** * 动态权限验证模块 * 包括访问GPS,调用存储卡 * */ private void SetPermissionVerify(){ List<String> permissionList=new ArrayList<>(); // 获取位置信息 if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } //获取手机状态 if(ContextCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_GRANTED) {//表示未授权 // 申请一个(或多个)权限,并提供用于回调返回的获取码(用户定义) permissionList.add(Manifest.permission.READ_PHONE_STATE); } if(ContextCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if(!permissionList.isEmpty()){ String[] permissions=permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(this,permissions,1); }else { //StartRequestLocation(); } } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } }
当编写完成后就允许程序,可以在手机APP上看到百度地图的初始界面,以北京天安门为中心的默认图。
运行成功的界面
看到这个界面,就证明目前运行成功了。
说明申请密钥成功,引入SDK成功,配置其环境变量成功,可以正常使用百度地图的所有功能了。
切换地图类型
百度地图默认显示常规地图,可以通过代码来调节地图的显示类型,这里总共有3种,分别是普通地图、卫星图、空白地图。
可以通过BaiduMap中的setMapType()方法来设置地图类型。
- 普通地图
mBaiduMap=mMapView.getMap(); mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); //普通地图
这就是普通地图,也就是我们平时打开地图软件看到的默认显示地图。
- 卫星图
mBaiduMap=mMapView.getMap(); mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); //卫星地图
空白地图
mBaiduMap=mMapView.getMap(); mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE); //卫星地图
这个就是白色的底图。
看到这里,如何你按照上面的提示,仔细的操作,那么也能顺利的加载百度地图到你的项目中去,那么接下来就开始做一些简单的业务比如根据网络显示当前的位置信息,在地图上面标记点,绘制线,做标注,实现离线地图等。
期待后面的推文吧,我会将学习百度地图开发时踩的坑都分享出来,希望能帮助到后面需要使用百度地图的朋友。