(Android)调用百度地图api之地图定位

百度地图Android定位教程
本文介绍如何在Android应用中集成百度地图定位服务。包括在AndroidManifest中配置定位服务,在布局XML文件中添加地图控件,以及核心代码实现,如初始化定位、动态权限获取等。

感谢 hyman 的视频教学课程:https://www.imooc.com/video/5686

 

一、在AndroidManifest中百度地图定位服务

<service
    android:name="com.baidu.location.f"
    android:enabled="true"
    android:process=":remote" >
</service>

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

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

三、核心代码 

  •  声明所需变量
private LocationClient mLocationClient;
private MyLocationListener mLocationListener;
private boolean isFirstIn = true; //是否为初次定位
private double mLatitude; //记录纬度值
private double mLongtitude; //记录精度值
  • 核心代码 
private void initLocation() //初始化函数
{
    mLocationClient = new LocationClient(this);
    mLocationListener = new MyLocationListener();
    mLocationClient.registerLocationListener(mLocationListener);
    LocationClientOption option = new LocationClientOption();
    option.setCoorType("bd09ll"); //坐标类型
    option.setIsNeedAddress(true);
    option.setOpenGps(true);
    option.setScanSpan(1000); //每隔多少秒进行一次请求
    mLocationClient.setLocOption(option);
}
private class MyLocationListener implements BDLocationListener //地图监听函数
{
    @Override
    public void onReceiveLocation(BDLocation location)
    {
        MyLocationData data = new MyLocationData.Builder()
                .accuracy(location.getRadius())
                .latitude(location.getLatitude())
                .longitude(location.getLongitude())
                .build();

        mBaiduMap.setMyLocationData(data);

        // 记录最新的经纬度
        mLatitude = location.getLatitude();
        mLongtitude = location.getLongitude();

        if (isFirstIn)
        {
            LatLng latLng = new LatLng(location.getLatitude(),
                    location.getLongitude());
            MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
            mBaiduMap.animateMapStatus(msu); //动画效果
            isFirstIn = false;
        }
    }
}
@Override
protected void onStart()
{
    super.onStart();
    // 开启定位
    mBaiduMap.setMyLocationEnabled(true);
    if (!mLocationClient.isStarted())
        mLocationClient.start();
}
@Override
protected void onStop()
{
    super.onStop();
    // 停止定位
    mBaiduMap.setMyLocationEnabled(false);
    mLocationClient.stop();
}

 四、其它

1、Android 6.0中动态权限获取机制问题

2、 Android 6.0中动态获取权限

private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.ACCESS_FINE_LOCATION};
public static void verifyStoragePermissions(Activity activity) {
    int permission = ActivityCompat.checkSelfPermission(activity,
            Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (permission != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE);
    }
}

3、定位返回错误码 

可通过Location.getLocType()方法获取错误码信息,具体说明如下:

61:GPS定位结果,GPS定位成功。

62:无法获取有效定位依据,定位失败,请检查运营商网络或者WiFi网络是否正常开启,尝试重新请求定位。

63:网络异常,没有成功向服务器发起请求,请确认当前测试手机网络是否通畅,尝试重新请求定位。

66:离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果。

68:网络连接失败时,查找本地离线定位时对应的返回结果。

161:网络定位结果,网络定位成功。

162:请求串密文解析失败,一般是由于客户端SO文件加载失败造成,请严格参照开发指南或demo开发,放入对应SO文件。

167:服务端定位失败,请您检查是否禁用获取位置信息权限,尝试重新请求定位。

505:AK不存在或者非法,请按照说明文档重新申请AK。

int code = location.getLocType();
String s=String.valueOf(code);
Toast.makeText(context, s,
        Toast.LENGTH_SHORT).show();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值