初学者学习百度地图一定会很困惑,无从下手。今天,手把手教你写一个最简单的 基于百度地图的小Demo
先看效果图:
首先,新建一个项目,建议写Demo的时候就养成良好的包名规范,不要因为Demo就随意写。
接着打开百度SDK下载页:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
将下载好的包解压后你会得到:
libs文件夹:里面包含了开发用的SDK
doc文件夹:包含了开发文档
Sample:百度官方提供的Demo
切换到AS,定位到app-src-main,新建一个jniLibs文件夹,将libs文件夹里的东西都拷贝过来,
我们将libs文件夹里的jar包导入到项目里 如图:
如图,在没有导入之前,baidumapapi...的左边都是没有三角的,我们右键,add as library,或者Ctrl+Alt+Shift+S,在左边Modules下选择app,接着在右边选择Dependencies,点+号,File,挨个添加到项目里。
接下来,申请百度的key
如果你第一次接触,此时,你应该生成debug.keystore文件,用该文件去获取SHA1的值,http://blog.csdn.net/u012552275/article/details/52457590,耐心看下去,申请成功后是这样的
接下来,就开始进入写代码环节:
我们打开http://wiki.lbsyun.baidu.com/cms/androidsdk/doc/v4_0_0/index.html读文档,发现mapView是可以呈现出地图的View,我们的地图操作都要基于这个View。
看关系发现它也是继承自ViewGroup,先不管那么多,复制com.baidu.mapapi.map.MapView到我们的项目的布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.mymap.mymapdemo.MainActivity"> <com.baidu.mapapi.map.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </RelativeLayout>ok到此位置,布局就搞定了。太傻瓜式了根本没有技术含量有木有!
接着在我们的类里:
public class MainActivity extends AppCompatActivity { private MapView mMapView; // 展示的地图控件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //用于初始化百度地图 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } }其各个生命周期里,要加上mMapView各种方法,这里百度已经封装好了我们只需要调用一下就可以了
ok,完成了大部分,此时如果在机器上跑,一定会抱错,原因是1.我们没有加入权限:
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <!-- 这个权限用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 用于读取手机当前的状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 访问网络,网络定位需要上网 --> <uses-permission android:name="android.permission.INTERNET" />
2.我们没有使用到百度的key
打开Minifest文件,在Application节点里加入
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="这里将百度申请的key粘贴过来" />至此,大功告成,毫无悬念。当然你也可以参考百度官方的教程http://lbsyun.baidu.com/index.php?title=androidsdk/guide/hellobaidumap
接下来,认识几个新方法:
private void initView() { mMapView = (MapView) findViewById(R.id.mapview); mBaiduMap = mMapView.getMap(); /** * 设置地图的类型 */ mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);//普通地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);//卫星地图 mBaiduMap.setTrafficEnabled(true);//开启交通图 mBaiduMap.setBaiduHeatMapEnabled(true);//开启百度城市热力图 }如此,地图上的东西就逐渐多了起来,在开发中,必须根据需求展示地图层,否则软件会在性能上落后很多。
后续,我会加入更多百度地图的文章,以便我们更多的交流经验。