安卓开发——在应用中简单调用Android百度地图API SDK
Posted 贝克街221B–
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓开发——在应用中简单调用Android百度地图API SDK相关的知识,希望对你有一定的参考价值。
目录
需求展示
利用百度地图API定位到当前所在位置,并显示所在的经纬度和地址信息。
效果展示:
申请百度地图API密钥
首先参考百度地图官方文档申请和注册密钥AK:androidsdk | 百度地图API SDK
在此获得包名:
输入申请到的SHA1码:
如何获得SHA1码呢?
①首先找到SDK安装目录,找到.android,继续找到debug.keystore,生成绝对路径,我这里是D:\\androidsdk\\.android\\debug.keystore,复制待用。
②然后进入ANDROID STUDIO的终端Terminal,输入以下代码:
keytool -list -v -keystore 你自己的路径 -alias androiddebugkey
输入默认密钥库口令:
android
复制以下的SHA1码,黏贴到发布版SHA1码,生成百度控制台应用:
这样,百度地图API的密钥就申请完毕了。
配置ANDROID STUDIO
复制AK码,黏贴到application标签内,activity标签外:
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
下载开发SDK:SDK下载 - 百度LBS开放平台
选择基础定位功能和基础地图SDK选项:
选择jar包:
解压后黏贴到lib目录下,并将BaiduLBS_Android.jar包添加到依赖:
以上,ANDROID STUDIO中的百度地图配置已经完成。
编写项目代码
编写MainActivity的代码:
public class MainActivity extends AppCompatActivity
LocationClient mLocationClient; //定位客户端
MapView mapView; //Android Widget地图控件
BaiduMap baiduMap;
boolean isFirstLocate = true;
TextView tv_Lat; //纬度
TextView tv_Lon; //经度
TextView tv_Add; //地址
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
//如果没有定位权限,动态请求用户允许使用该权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this, new String[]Manifest.permission.ACCESS_FINE_LOCATION, 1);
else
requestLocation();
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
switch (requestCode)
case 1:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED)
Toast.makeText(this, "没有定位权限!", Toast.LENGTH_LONG).show();
finish();
else
requestLocation();
private void requestLocation()
initLocation();
mLocationClient.start();
private void initLocation() //初始化
mLocationClient = new LocationClient(getApplicationContext());
mLocationClient.registerLocationListener(new MyLocationListener());
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.bmapView);
baiduMap = mapView.getMap();
tv_Lat = findViewById(R.id.tv_Lat);
tv_Lon = findViewById(R.id.tv_Lon);
tv_Add = findViewById(R.id.tv_Add);
LocationClientOption option = new LocationClientOption();
//设置扫描时间间隔
option.setScanSpan(1000);
//设置定位模式,三选一
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
/*option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);
option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);*/
//设置需要地址信息
option.setIsNeedAddress(true);
//保存定位参数
mLocationClient.setLocOption(option);
//内部类,百度位置监听器
private class MyLocationListener implements BDLocationListener
//获取纬度信息
@Override
public void onReceiveLocation(BDLocation bdLocation)
tv_Lat.setText(bdLocation.getLatitude()+"");
tv_Lon.setText(bdLocation.getLongitude()+"");
tv_Add.setText(bdLocation.getAddrStr());
if(bdLocation.getLocType()==BDLocation.TypeGpsLocation ||
bdLocation.getLocType()==BDLocation.TypeNetWorkLocation)
navigateTo(bdLocation);
private void navigateTo(BDLocation bdLocation)
if(isFirstLocate)
LatLng ll = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());
MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
baiduMap.animateMapStatus(update);
isFirstLocate = false;
@Override
protected void onResume()
super.onResume();
mapView.onResume();
@Override
protected void onPause()
super.onPause();
mapView.onResume();
@Override
protected void onDestroy()
super.onDestroy();
mLocationClient.stop();
mapView.onDestroy();
编写activity_main.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!--百度地图控件-->
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
<!--位置文本布局的背景色代码的前2位代码为透明度-->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#e0000000"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginTop="20dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="纬度:"
android:textColor="#ffffff"
android:textSize="15dp" />
<TextView
android:id="@+id/tv_Lat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textColor="#ffffff"
android:textSize="15dp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="经度:"
android:textColor="#ffffff"
android:textSize="15dp" />
<TextView
android:id="@+id/tv_Lon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textColor="#ffffff"
android:textSize="15dp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="12dp"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="地址:"
android:textColor="#ffffff"
android:textSize="15dp" />
<TextView
android:id="@+id/tv_Add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textColor="#ffffff"
android:textSize="15dp" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
在manifest.xml中添加申请权限:
package="edu.hubu.mydbs">
<!-- 这个权限用于进行网络定位-->
<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"/>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在manifest.xml文件中的application标签中添加service声明:
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>
运行项目
由于ANDRID STUDIO中的虚拟机通过网络定位,故运行项目后定位一直显示在不正确的位置。
故我选择了直接在手机上进行USB调试,使用了小米手机。
具体如何连接手机调试USB,我参考了下面这篇文章:
以上是关于安卓开发——在应用中简单调用Android百度地图API SDK的主要内容,如果未能解决你的问题,请参考以下文章