Android 百度地图开发(一)

现在好多手机应用开发需要使用到百度地图,在使用百度地图的过程和遇到的问题整理一下方便以后使用

申请密钥
使用白度地图首先需要申请API Key,申请百度账户才能得到API Key. 登录 http://developer.baidu.com/map/ 点击申请密钥
申请过程中需SHA1,使用Eclipse的同学应该很容易使用图像工具找到,但是使用Android-studio的同学可能找不到,我也没有找到
我找的过程是,打开cmd,或者在AS中的Terminal.找到debug-keystore文件,比如我的是D:\Users\*****\.android.

在Termina中进入该文件目录,然后输入"keytool -list -v -keystore debug.keystore",命令,记住进入目录下.


申请密钥的其他步骤就不在此多说了.拿的密钥后我们就可以正式在我们的App中使用了.
正式开发
创建好项目后,首先将API包括的两个文件baidumapapi.jar和libBMapApiEngine.so拷贝到工程根目录及libs\armeabi目录下,
AS添加jar有两种方法,一种是在所要添加的jar上右键选择"Add as library"即可,一种是打开build.gradle,build.gradle有两个
一定要打开项目内部的build.gradle,添加下面的代码,
dependencies {
    .....
    compile files('libs/BaiduLBS_Android.jar')
}


基本使用
在AndroidManifest.xml中添加
<meta-data  
    android:name="com.baidu.lbsapi.API_KEY"  
    android:value="AK" />  
name就是上面的name不要改变,value是你申请到的AK.
百度API所需权限 
<uses-permission android:name="android.permission.GET_ACCOUNTS" />  
<uses-permission android:name="android.permission.USE_CREDENTIALS" />  
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />  
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_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.BROADCAST_STICKY" />  
<uses-permission android:name="android.permission.WRITE_SETTINGS" />  
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
基本是那个就是这些权限了.
在自己的xml文件中加入mapview,
<com.baidu.mapapi.map.MapView  
     android:id="@+id/m_mapview"  
     android:layout_width="match_parent"  
     android:layout_height="match_parent"  
     android:clickable="true" />
在Activity中的onCreate方法中, 
    private MapView mBaiduMapView = null;  
@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);     
    SDKInitializer.initialize(getApplicationContext());  
    setContentView(R.layout.activity_main);
    initBaiduMap();
}
注意两点,
1.initialize方法中必须传入的是ApplicationContext,传入this,或者MAinActivity.this都会报运行时异常.
2.initialize方法必须写在setContentView方法前面,新同学也许会写在后面结果报xml中的错误.
private void initBaiduMap(){
    mBaiduMapView = (MapView) findViewById(R.id.m_mapview); 
}
写到这里基本上就可以运行出效果了.
    @Override  
    protected void onResume() {  
        super.onResume();  
        mBaiduMapView.onResume();  
    }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        mBaiduMapView.onPause();  
    }  
    @Override  
    protected void onDestroy() {  
        mBaiduMapView.onDestroy();  
        mBaiduMapView = null;  
        super.onDestroy();  
    }
有的新同学使用AS运行的时候会报错,我写出我自己遇到的几个错误.
1.java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform.comjni.map.basemap.JNIBaseMap.Create:()J
这个是由于在AS上我们将.so文件放在了libs文件夹中,在AS中这样是不行的.我们需要将其放在JniLibs文件夹中,于是有的新同学就自己创建了
JniLibs文件夹结果还是不行,这个时候新同学可以仔细看一下你所创建的JniLibs文件夹和res文件是否一样,有个金黄色的圆柱行的标志,在右下角.
如果没有那就对了新同学其实不需要自己添加JniLibs文件夹的.我们所要做的是:
打开项目内部的build.gradle,添加下面的代码,
sourceSets {
    main {
        jniLibs.srcDir 'libs'
    }
}
再看一下是否有了JniLibs文件夹.这样就不会后此错误了.
2.也许运行的时候会遇见230错误,Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败.
这个其实基本上是自己的AK出现了问题,你可以查看自己的SHA1是否正确,申请密钥时填写的包名是否完整.

另外有的同学的电脑上有两个\.android\debug-keystore文件,我就是这样被坑了的.所有确认一下自己的AS所对应的debug-keystore文件.


今天就写到这里,后续我还会在继续使用百度地图踩踩坑,总结一下为新同学填坑.

版权声明:本文为博主原创文章,未经博主允许不得转载。

你可能感兴趣的:(android,百度地图)