Android开发百度地图操作步骤(二)------------具体步骤
1、新建工程;
2、下载百度地图API库,并将API库导入对应的工程(下载地址:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download);
3、申请API key(申请地址:http://lbsyun.baidu.com/apiconsole/key);
注意:SHA1有两个值,一个是开发版,一个是发布版权,生成keystore后,查找SHA1的值是发布版权,未生成keystore就查看到的SHA1值是开发版权的,具体操作步骤如下:
生成keystore:
点击android studio中菜单栏“Build”,选中“Generate Signed APK”,如下图所示:
点击对话框中“Cancel”按钮即可。这样便生成好了一下keystore的jks文件,下面查看SHA1值。一般有两种方法:
A、通过命令窗口查找,查找到的是发布版权的SHA1值,如下图所示:
先找到keytool文件所在位置,如下图所示:
打开命令行窗口进入对应路径下:
先进入对应keytool所在的目录,然后输入:keytool –list –v –keystore +jks文件所在的路径,确认后输入密码即显示下图,即找到SHA1值。
B、 直接在android studio中找SHA1值,这是开发版权的值):
下面进行APIkey的申请,进入申请的网站,如下图所示:
进入后如果没有百度帐号,先注册一个,然后才能进行申请,进入申请页后,填写相关信息即可,SHA1值即为我们前面查找的值,填写完成后提交即可获取密钥。至此,第三步已经完成。
4、在布局文件中添加百度地图控件;
在布局文件中,直接将下图红框内代码复制即可:
5、在AndroidManifest.xml中加入百度地图开发所需的权限,代码如下;
6、Activity中编辑代码(考虑到Android6.0及以上版本,代码中增加动态权限申请);
packagecom.example.bingdian.sharelocation;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
public class MainActivity extendsAppCompatActivity {
//定位SDK核心类
private LocationClientlocationClient;
//定位监听
private MyLocationListennermyListener=new MyLocationListenner();
//百度地图控件
private MapViewmapView;
//百度地图对象
private BaiduMapbaiduMap;
// 是否首次定位
boolean isFirstLoc=true;
/**
* 需要进行检测的权限数组
* */
protected String[]PERMISSIONS_CONTACT={
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
};
private static final int REQUEST_CONACTS=0;
/**
* 定位SDK监听函数
*/
public class MyLocationListennerimplementsBDLocationListener {
@Override
public void onReceiveLocation(BDLocationlocation) {
// map view 销毁后不在处理新接收的位置
if (location ==null|| mapView == null) {
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
baiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc =false;
LatLng ll = newLatLng(location.getLatitude(),location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
}
}
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
/**
* 权限检查
*/
if(Build.VERSION.SDK_INT>=23) {
initMap();
showContacts(baiduMap);
}else{
initMap(); //初始化地图
initLoacation(); //初始化定位
}
}
/**
* 判断用户是否授权,没有授权,进入权限申请:requestContactsPermissions
* */
private void showContacts(BaiduMap v) {
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
) {
requestContactsPermissions(v); //授权程序
}else{
initMap(); //初始化地图
initLoacation(); //初始化定位
}
}
/**
* 动态授权程序
* */
private void requestContactsPermissions(BaiduMapv) {
if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.ACCESS_COARSE_LOCATION)
|| ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.ACCESS_FINE_LOCATION)
|| ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
|| ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.READ_PHONE_STATE)) {
ActivityCompat.requestPermissions(MainActivity.this,PERMISSIONS_CONTACT,REQUEST_CONACTS);
}
else {
ActivityCompat.requestPermissions(MainActivity.this,PERMISSIONS_CONTACT,REQUEST_CONACTS);
}
}
/**
* 检测是否所有的权限都已经授权
* @param grantResults
* @return
* @since 2.5.0
* */
public static boolean verifyPermissions(int[] grantResults){
for (intresult : grantResults){
if (result!= PackageManager.PERMISSION_GRANTED){
return false;
}
}
return true;
}
/**
* 用于授权结果的管理
* 如果全部授权的话,则直接通过进入
*/
@Override
public void onRequestPermissionsResult(intrequestCode,String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
if (requestCode == REQUEST_CONACTS)//判断请求码与请求结果是否一致
{
if(verifyPermissions(grantResults)){//if(CheckPermissionsActivity.verifyPermissions(grantResults)){
initMap(); //初始化地图
initLoacation(); //初始化定位
}else{
finish();
}
} else { //提示对话框设置
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
}
/**
* 地图初始化
*/
private void initMap() {
//获取百度地图控件
mapView =(MapView) findViewById(R.id.BaiduMapView);
//获取百度地图对象
baiduMap =mapView.getMap();
//开启定位图层
baiduMap.setMyLocationEnabled(true);
}
/**
* 定位初始化
*/
private void initLoacation() {
//声明定位SDK核心类
locationClient =newLocationClient(this);
//注册监听
locationClient.registerLocationListener(myListener);
//定位配置信息
LocationClientOption option = newLocationClientOption();
option.setOpenGps(true); //打开GPS
option.setCoorType("bd09ll"); //设置坐标类型
locationClient.setLocOption(option);
locationClient.start(); //开启定位
}
@Override
protected void onPause() {
mapView.onPause();
super.onPause();
}
@Override
protected void onResume() {
mapView.onResume();
super.onResume();
}
@Override
protected void onDestroy() {
// 退出时销毁定位
locationClient.stop();
// 关闭定位图层
baiduMap.setMyLocationEnabled(false);
mapView.onDestroy();
mapView =null;
super.onDestroy();
}
}
如果想在其它电脑上运行源程序,按下图操作:
指定的文件中加入红框中代码,该段代码即为生成keysotre的相关内容,对就更改一下即可,在该文件中,再加入以下代码即可,这样便可在其它电脑上操作运行源程序了。
7、打包、生成jks密钥、签名Apk。