Android开发百度地图(一)之初体验

本文系作者原创,如需转载请注明出处!

一、概述

我来现在这家公司前是面试的java,公司招聘的也是java。结果上班之后,给我一个U盘,里面是Android的Eclipse开发环境,让我做Android?天啦噜,我压根不会,然后就自学咯!边百度边、看文档操作,开始上手了,然后才知道谷歌对Eclipse已经停止更新,推出了AndroidStudio,然后公司用的还是Eclipse中的Android4.2版本。上述就是我为啥用Eclipse开发APP,就别说我啥不追随技术更新...反正这个月底我也走人了,当然最主要的是公司电脑根本带不动AndroidStudio,进入正题

我选择百度地图是有原因的,它确实在使用上来说(当然除了那可怕的“推广”、“全家桶”),还是很不错的!所以导致我很喜欢谷歌地图

注意:由于谷歌对Eclipse的ADT停止更新以及百度地图API的原因,百度地图SDK3.7(不包含)以上版本不支持低版本的ADT(编译通过,但app闪退,提示无法初始化SDK,未找到该类),至于版本几,没测试。目前知道的是ADT23.7是支持。我现在的环境是ADT23.7、Android6.0

一、正文

1、先去百度地图API官网注册帐号并且申请API KEY——百度地图开放平台
进入API控制台中心创建应用

Paste_Image.png

按照要求填写

Paste_Image.png

发布版SHA1:是创建的android.keystore中的查询出来的,打了码的那玩意儿就是发布版SHA1,使用CMD进入该文件目录,键入

keytool -list -keystore debug.keystore
Paste_Image.png

开发版SHA1:在Eclipse>Window>Preferences>Android>Build,打了马赛克那玩意儿

Paste_Image.png

包名:在AndroidManifest.xml文件中查看

Paste_Image.png

创建成功后最后会得到这一串key

Paste_Image.png

2、下载SDK包
进入百度地图SDK中可以自定义下载开发包、示例代码和文档。

3、基本配置
1> 导入库
将libs jar包导入到项目中,还有so文件,把so文件放到armeabi文件夹,jar包放到libs文件夹,如下图所示:

Paste_Image.png

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>

然后就完成了基本配置,之后就可以开始撸代码了

4、开始撸代码

第一步,在主界面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="该类所在路径"

看以下官方截图中框框部分注释

Paste_Image.png

官方这样说道“在使用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();
    }
    
}

5、执行效果
效果图引用官方例子图片,因为现在这个app进度已经快了好多,效果图已经不适用,大同小异,将就看看吧!

Paste_Image.png

6、注意事项
a,要是出现白色小方格,地图不显示,请检查key配置是否正确
b,要是出现一开启应用程序就闪退并报未能找到SDKInitializer类相似的问题,请检查libs导入是否正确。如还是不能解决,请参考文章开头所说的描述

三、结语

到这里初体验就已经结束了,是不是很简单?没事儿,后面我们再慢慢深入。
说实话,这篇文章我花了一个多星期才写好,说第二天就写好,结果我看了一天的历史,后面又看了几天。说第二天就写好,结果我写app又花了好多天。说第二天写好,结果浪着浪着时间又过去。我不是在找借口啊!没有,绝对没有的事儿!
这篇其实是我在写一个app(等写好后开源的一个小项目,受不了一些地图无所谓的功能,我们是有“态度”的青年,对不对?)开始写的,然后然后,就各种原因啊!天时地利人和都不沾边啥的,但这没有关系,我会尽快让文章跟上app进度的,嗯,相信我

PS
您还可以关注我的
微信公众号:kimball
个人小站:www.kimball.site
新浪微博:kimball-lu
知乎:kimball

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,510评论 18 139
  • 一.百度地图的使用 (一)显示百度地图的步骤有下面几步: 下载SDK 加入lib中,依赖jar,并且依赖so文件 ...
    于加泽阅读 4,372评论 1 8
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,128评论 25 707
  • 各位小伙伴们大家好,今天我向大家介绍一下苹果百度地图的使用方法,因为做过一些想关的APP,感觉百度地图还是挺方便的...
    Lee0528阅读 14,624评论 18 46
  • 在我看来,如果男生的付出与回报是不成正比的,那么一开始女生就不要对男生有任何爱意的暗示,这样太不公平。男女双方还不...
    真喜欢吃鱼的_喵__阅读 284评论 0 0