Android开发百度地图详细操作

Android开发百度地图操作步骤(二)------------具体步骤

1、新建工程;

Android开发百度地图详细操作_第1张图片

2、下载百度地图API库,并将API库导入对应的工程(下载地址:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download);

Android开发百度地图详细操作_第2张图片

3、申请API key(申请地址:http://lbsyun.baidu.com/apiconsole/key);

注意:SHA1有两个值,一个是开发版,一个是发布版权,生成keystore后,查找SHA1的值是发布版权,未生成keystore就查看到的SHA1值是开发版权的,具体操作步骤如下:

生成keystore:

点击android studio中菜单栏“Build”,选中“Generate Signed APK”,如下图所示:

进入“New Key Store”对话框,如下图所示:Android开发百度地图详细操作_第3张图片

输完相关信息后,点击“OK”,弹出如下对话框:Android开发百度地图详细操作_第4张图片

点击对话框中“Cancel”按钮即可。这样便生成好了一下keystore的jks文件,下面查看SHA1值。一般有两种方法:

A、通过命令窗口查找,查找到的是发布版权的SHA1值,如下图所示:

先找到keytool文件所在位置,如下图所示:

Android开发百度地图详细操作_第5张图片

打开命令行窗口进入对应路径下:

Android开发百度地图详细操作_第6张图片

先进入对应keytool所在的目录,然后输入:keytool –list –v –keystore +jks文件所在的路径,确认后输入密码即显示下图,即找到SHA1值。

Android开发百度地图详细操作_第7张图片

B、 直接在android studio中找SHA1值,这是开发版权的值):

Android开发百度地图详细操作_第8张图片

下面进行APIkey的申请,进入申请的网站,如下图所示:

Android开发百度地图详细操作_第9张图片

进入后如果没有百度帐号,先注册一个,然后才能进行申请,进入申请页后,填写相关信息即可,SHA1值即为我们前面查找的值,填写完成后提交即可获取密钥。至此,第三步已经完成。

4、在布局文件中添加百度地图控件;

在布局文件中,直接将下图红框内代码复制即可:

Android开发百度地图详细操作_第10张图片



5、在AndroidManifest.xml中加入百度地图开发所需的权限,代码如下;

Android开发百度地图详细操作_第11张图片

Android开发百度地图详细操作_第12张图片

 

 

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();
   
}

}

如果想在其它电脑上运行源程序,按下图操作:

Android开发百度地图详细操作_第13张图片

指定的文件中加入红框中代码,该段代码即为生成keysotre的相关内容,对就更改一下即可,在该文件中,再加入以下代码即可,这样便可在其它电脑上操作运行源程序了。

Android开发百度地图详细操作_第14张图片

7、打包、生成jks密钥、签名Apk。

 

你可能感兴趣的:(Android)