Android开发实战一 百度SDK

时间:2021-01-04 21:43:01

一 申请百度API key

百度地图API:http://developer.baidu.com/map/

百度地图开发者平台地址:http://developer.baidu.com/map/ 。点击界面的“申请密钥”,进入界面之后,点击“创建应用”按钮,我这里已经申请过,所以不需要再申请,直接创建应用即可。

Android开发实战一 百度SDK

Android Studio 获取调试版SHA1,如下:如果想生成release版的参照 https://blog.csdn.net/qq_34507714/article/details/78861043

  1. 输入命令  C: 进入C盘;

  2. 输入命令  cd Users\你的用户名\.android  就找到了.android;

  3. 输入命令  keytool -list -v -keystore debug.keystore  回车键;

  4. 输入密钥库口令  android  回车键,就可以看到调试版SHA1啦!

Android开发实战一 百度SDK

Android开发实战一 百度SDK

Android开发实战一 百度SDK

二 下载SDK

SDK下载地址:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download

Android开发实战一 百度SDK

第一步:在工程app/libs目录下放入baidumapapi_vX_X_X.jar包,及so文件如下图所示,全部丢进去即可
第二步:导入jar包。菜单栏选择File->Project Structor->Modules->Dependencies,点击+号,选择File dependency,选择jar包导入。
通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。
Android开发实战一 百度SDK

Android开发实战一 百度SDK

三 代码部分

3.1 配置权限和Key

<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<!-- 获取CUID,用于鉴权,请求签名等 -->
<uses-permission android:name="com.android.launcher.permission.WRITE_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" />

Android开发实战一 百度SDK

3.2 在布局xml文件中添加地图控件

<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />

3.3 在应用程序创建时初始化SDK引用的Context全局变量

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.bmapView);
}

3.4 执行结果

Android开发实战一 百度SDK

gitHub:https://github.com/MichealPan9999/BaiduApi

四 进阶训练

添加百度地图查询功能

4.1 通过中文名称转换成经纬度

/*
*根据地址得到地理坐标
*/
public void getLatAndLngByAddress() {
String addr = "";
String lat = "";
String lng = "";
try {
addr = java.net.URLEncoder.encode(address, "UTF-8");//编码
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String url = String.format("http://api.map.baidu.com/geocoder/v2/?"
+ "address=%s&ak=生成的ak&mcode=生成的安全码&output=json", addr);
Log.d("panzqww", "-----url = " + url);
URL myURL = null;
URLConnection httpsConn = null;
String[] location = null;
//进行转码
try {
myURL = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
httpsConn = (URLConnection) myURL.openConnection();//建立连接
if (httpsConn != null) {
InputStreamReader insr = new InputStreamReader(//传输数据
httpsConn.getInputStream(), "UTF-8");
BufferedReader br = new BufferedReader(insr);
String data = null;
if ((data = br.readLine()) != null) {
System.out.println(data);
location = getLocation(data);
}
insr.close();
br.close();
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
if (location == null || location.length < 2)
{
return;
}
this.Latitude = Double.parseDouble(location[0]);
this.Longitude = Double.parseDouble(location[1]);
}

ak及安全码获取方式:点击设置进入到配置应用中

Android开发实战一 百度SDK

其中对应的ak为:

Android开发实战一 百度SDK

安全码是:

Android开发实战一 百度SDK

AddressToLatitudeLongitude at = new AddressToLatitudeLongitude("江西省樟树市");
at.getLatAndLngByAddress();
getLocationByLL(at.getLatitude(), at.getLongitude());
/*
*根据经纬度前往
*/
public void getLocationByLL(double la, double lg) {
//地理坐标的数据结构
LatLng latLng = new LatLng(la, lg);
//描述地图状态将要发生的变化,通过当前经纬度来使地图显示到该位置
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
myBaiduMap.setMapStatus(msu);
}

Android开发实战一 百度SDK

4.2 根据经纬度定位地址

/*
*根据经纬度前往
*/
public void getLocationByLL(double la, double lg) {
//地理坐标的数据结构
LatLng latLng = new LatLng(la, lg);
//描述地图状态将要发生的变化,通过当前经纬度来使地图显示到该位置
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
myBaiduMap.setMapStatus(msu);
}

代码地址 github:https://github.com/MichealPan9999/BaiduApi