本文系做者原创,如需转载请注明出处!java
我来如今这家公司前是面试的java,公司招聘的也是java。结果上班以后,给我一个U盘,里面是Android的Eclipse开发环境,让我作Android?天啦噜,我压根不会,而后就自学咯!边百度边、看文档操做,开始上手了,而后才知道谷歌对Eclipse已经中止更新,推出了AndroidStudio,而后公司用的仍是Eclipse中的Android4.2版本。上述就是我为啥用Eclipse开发APP,就别说我啥不追随技术更新...反正这个月底我也走人了,固然最主要的是公司电脑根本带不动AndroidStudio,进入正题android
我选择百度地图是有缘由的,它确实在使用上来讲(固然除了那可怕的“推广”、“全家桶”),仍是很不错的!因此致使我很喜欢谷歌地图面试
注意:因为谷歌对Eclipse的ADT中止更新以及百度地图API的缘由,百度地图SDK3.7(不包含)以上版本不支持低版本的ADT(编译经过,但app闪退,提示没法初始化SDK,未找到该类),至于版本几,没测试。目前知道的是ADT23.7是支持。我如今的环境是ADT23.七、Android6.0api
一、先去百度地图API官网注册账号而且申请API KEY——百度地图开放平台
进入API控制台中心建立应用微信
按照要求填写网络
发布版SHA1:是建立的android.keystore中的查询出来的,打了码的那玩意儿就是发布版SHA1,使用CMD进入该文件目录,键入app
keytool -list -keystore debug.keystore
开发版SHA1:在Eclipse>Window>Preferences>Android>Build,打了马赛克那玩意儿ide
包名:在AndroidManifest.xml文件中查看测试
建立成功后最后会获得这一串keyui
二、下载SDK包
进入百度地图SDK中能够自定义下载开发包、示例代码和文档。
三、基本配置
1> 导入库
将libs jar包导入到项目中,还有so文件,把so文件放到armeabi文件夹,jar包放到libs文件夹,以下图所示:
2> 配置key及权限
打开AndroidManifest.xml文件,添加如下权限:
<!-- 系统设置权限 --> <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" />
而后在application里面添加key和定位服务
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="申请的key值" /> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service>
而后就完成了基本配置,以后就能够开始撸代码了
四、开始撸代码
第一步,在主界面main.xml添加地图视图
<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
第二步,建立MApplication.java进行初始化地图相关,在AndroidManifest.xml文件application中添加:
android:name="该类所在路径"
看如下官方截图中框框部分注释
官方这样说道“在使用SDK各组件以前初始化context信息,传入ApplicationContext。注意该方法要在再(有个错别字)setContentView方法以前实现”,咱们知道,实现Application后,当应用程序启动时,它首先执行的是Application实现类的onCreate(Bundle saveInstanceState)方法,是在Activity实现类以前,因此适合进行初始化地图相关。
固然,你要是在Activity中也是能够的
/** * 描述:APP应用程序 <br> * 做者: kimball <br> * E-mail: kimballlu@foxmail.com <br> * 日期: 2017年3月7日 下午6:05:54 <br> */ public class MApplication extends Application { /** * 上下文对象 */ public static Context context; @Override public void onCreate() { super.onCreate(); //在使用SDK各组件以前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法以前实现 SDKInitializer.initialize(this.getApplicationContext()); } }
第三步,建立BaseActivity.java,继承AppCompatActivity(该类我是放一些Activity通用的东东的,后面会用到)
/** * 描述:Activity <br> * 做者: kimball <br> * E-mail: kimballlu@foxmail.com <br> * 日期: 2017年3月10日 上午9:47:04 <br> */ public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
第四步,ManActivity.java,继承BaseActivity.java
public class MainActivity extends BaseActivity { // 地图相关 private MapView mapView; // 地图控件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); // 初始化 this.init(); } /** * 初始化 */ private void init(){ // 初始化控件 this.initControls(); // 初始化地图 this.initMap(); } /** * 初始化控件 */ private void initControls(){ // 获取地图视图 this.mapView = (MapView) findViewById(R.id.bmapView); } /** * 初始化地图 */ private void initMap(){ // 不显示百度地图Logo mapView.removeViewAt(1); // 不显示地图上比例尺 mapView.showScaleControl(false); // 不显示地图缩放控件(按钮控制栏) mapView.showZoomControls(false); // 获取百度地图对象 baiduMap = mapView.getMap(); baiduMap.setMyLocationEnabled(true); // 设置为通常地图 baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); // 设置初始大图大小500米 MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); baiduMap.setMapStatus(msu); } /** * 当Activity处于可见状态时运行 */ @Override protected void onStart() { super.onStart(); } /** * Activity销毁时运行 */ @Override protected void onDestroy() { super.onDestroy(); // 管理地图的生命周期:销毁 if(mapView != null){ mapView.onDestroy(); } } /** * Activity能够获得用户焦点时运行 */ @Override protected void onResume() { super.onResume(); // 显示 if(mapView != null){ mapView.onResume(); } } /** * Activity被遮挡住时运行 */ @Override protected void onPause() { super.onPause(); // 暂停 if(mapView != null){ mapView.onPause(); } } /** * Activity处于不可见状态时运行 */ @Override protected void onStop() { super.onStop(); } }
五、执行效果
效果图引用官方例子图片,由于如今这个app进度已经快了好多,效果图已经不适用,大同小异,将就看看吧!
六、注意事项
a,要是出现白色小方格,地图不显示,请检查key配置是否正确
b,要是出现一开启应用程序就闪退并报未能找到SDKInitializer类类似的问题,请检查libs导入是否正确。如仍是不能解决,请参考文章开头所说的描述
到这里初体验就已经结束了,是否是很简单?没事儿,后面咱们再慢慢深刻。
说实话,这篇文章我花了一个多星期才写好,说次日就写好,结果我看了一天的历史,后面又看了几天。说次日就写好,结果我写app又花了好多天。说次日写好,结果浪着浪着时间又过去。我不是在找借口啊!没有,绝对没有的事儿!
这篇实际上是我在写一个app(等写好后开源的一个小项目,受不了一些地图无所谓的功能,咱们是有“态度”的青年,对不对?)开始写的,而后而后,就各类缘由啊!天时地利人和都不沾边啥的,但这没有关系,我会尽快让文章跟上app进度的,嗯,相信我
PS您还能够关注个人微信公众号:kimball我的小站:www.kimball.site新浪微博:kimball-lu知乎:kimball