百度地图开发之定位功能

    |     2015年12月25日   |   Android技术   |     0 条评论   |    1462

地图已经是日常刚需:出门先查位置,手机地图则让定位随时可用。下面用百度地图 Android 定位 SDK 把手机定位跑通:密钥、so/jar、Manifest、LocationClient。


一、准备工作

开发入口:http://developer.baidu.com/map,选 Android,再进定位模块按文档走。

  • 获取密钥,见官方文档 申请密钥
  • 下载开发包。注意 .so 与 jar 版本必须配套
  • 在 AndroidManifest 写入 Key、定位 Service、权限

二、Manifest:Key、Service、权限

1. application 里写入 API Key

<meta-data
    android:name="com.baidu.lbsapi.API_KEY"
    android:value="你申请的Key" />

2. 定位服务

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

3. 声明使用权限

<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

三、LocationClient 代码

高精度模式、坐标系 gcj02、扫描间隔 1000ms(注释里曾写 5000ms,以代码为准)、需要地址信息,然后 start() 并注册 BDLocationListener。

{
    LocationClient mLocationClient = new LocationClient(this.getApplicationContext());

    LocationClientOption option = new LocationClientOption();
    option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//设置定位模式
    option.setCoorType("gcj02");//返回的定位结果是百度经纬度,默认值gcj02
    option.setScanSpan(1000);//设置发起定位请求的间隔时间为1000ms
    option.setIsNeedAddress(true);
    mLocationClient.setLocOption(option);
    mLocationClient.start();

    mLocationClient.registerLocationListener(new BDLocationListener() {
        @Override
        public void onReceiveLocation(BDLocation location) {
            Log.i("tag", "onReceiveLocation >>>>>>>>>>>>");
            StringBuffer sb = new StringBuffer(256);
            sb.append("time : ");
            sb.append(location.getTime());
            sb.append("\nerror code : ");
            sb.append(location.getLocType());
            sb.append("\nlatitude : ");
            sb.append(location.getLatitude());
            sb.append("\nlontitude : ");
            sb.append(location.getLongitude());
            sb.append("\nradius : ");
            sb.append(location.getRadius());
            if (location.getLocType() == BDLocation.TypeGpsLocation) {
                sb.append("\nspeed : ");
                sb.append(location.getSpeed());
                sb.append("\nsatellite : ");
                sb.append(location.getSatelliteNumber());
                sb.append("\ndirection : ");
                sb.append("\naddr : ");
                sb.append(location.getAddrStr());
                sb.append(location.getDirection());
            } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
                sb.append("\naddr : ");
                sb.append(location.getAddrStr());
                sb.append("\noperationers : ");
                sb.append(location.getOperators());
            }
            logMsg(sb.toString());
            Log.e("tag", sb.toString());
        }
    });
}

最新示例见官方文档:Android 定位 SDK 指南。

步骤 要点
密钥 meta-data:com.baidu.lbsapi.API_KEY
so / jar 版本必须配套
Service com.baidu.location.f,独立 :remote 进程
权限 粗定位、精定位、Wi-Fi、网络、读写存储、INTERNET
代码 LocationClient + Option + BDLocationListener

一句话总结:百度定位三件套:配套 SDK、Manifest 配齐 Key/Service/权限,再用 LocationClient 收经纬度。

转载请注明来源:百度地图开发之定位功能
本文链接地址:https://ai.zhousir.top/?p=1105
回复 取消