Android 百度定位及地图SDK

一 、Android 百度定位SDK

1 、开发文档

1.1 :申请密钥api key:http://lbsyun.baidu.com/apiconsole/key

1.2:配置环境:

1.2.1 :添加库文件

a) 在 相关下载下载最新 库文件。

b)使用Eclipse开发的开发者,将SO文件的压缩文件解压出来,把对应架构下的SO文件放入开发者自己APP的对应架构下的文件夹中(建议全部放入以提 高程序兼容性);将JAR文件拷贝到工程的libs目录下,这样即可在程序中使用Android定位SDK。

  c)使用AndroidStutio的开发者除了上述操作外,还需要在build.gradle中配置SO文件的使用,如下所示:

		sourceSets {

        		main {

    				jniLibs.srcDirs = ['libs']

        		}

		}

如果开发的是系统应用,除了需要在工程中配置SO文件,还需要手动把对应架构的SO文件拷贝到/system/lib下,如果是64位系统,则需要将64位的 SO文件拷贝到/sytem/lib64下。

注意:新版本的定位SDK,开发者除了要更新JAR包之外,同时需要关注SO文件是否有更新。如果SO文件名称改变,即SO文件有更新,开发者要及 时替换掉老版本,否则会导致定位失败。

1.2.2 : 配置AndroidManifest文件

a) 在Application标签中声明Service组件,每个App都应该有单独一个定位Service。

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

b) 声明使用权限

		<!-- 这个权限用于进行网络定位-->
		<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>

c) 设置Acess key

		<meta-data
            		android:name="com.baidu.lbsapi.API_KEY"
            		android:value="AK" />       //key:开发者申请的Key


2、代码集成

2.1 :创建定位LocationClient对象并初始化设置

    /**
     * 创建定位对象
     */
    
 private LocationClient locationService;	     
    public void onStartLocation() {
        locationService = new LocationClient(getApplicationContext().getApplicationContext());
//        设置定位参数
        setLocationOption();
//        定位回调
        locationService.registerLocationListener(mListener);
//        开启定位
//        locationService.start();
    }

   /**
     * 设置定位参数
     */
    private void setLocationOption(){
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//设置高精度定位定位模式
        option.setOpenGps(true);
        option.setCoorType("bd09ll");//设置百度经纬度坐标系格式
//        option.setScanSpan(1000*3);//设置发起定位请求的间隔时间为3秒 , 默认0,即仅定位一次,
        option.setIsNeedAddress(true);//反编译获得具体位置,只有网络定位才可以
        option.setAddrType("all");
        locationService.setLocOption(option);
    }

   /**
     * 定位回调
     */
private BDLocationListener mListener = new BDLocationListener() { public void onReceiveLocation(BDLocation location) { }}

a):设置参数每间隔多少s定位一次: option.setScanSpan(1000*3)

b):开始定位:locationService.start()

c):停止定位:locationService.stop()


二 、Android 百度地图SDK




1、开发文档

1.1:在libs目录下添加 .jar包

工程配置还需要把jar包集成到自己的工程中,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。对应在build.gradle生成工程所依赖的jar文件说明。

1.2:在libs目录下添加.so文件

在libs目录下放入对应不同CPU架构的so文件。这样工程并不会自动加载libs下的so,需在gradle编译时,通过加入代码:

jniLibs.srcDir 'libs' 来说明so的路径为该libs路径。

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}


2、代码集成

2.1:初始化地图

/**
 * 关于地图
 */
private MapView mMapView ;
private BaiduMap mBaiduMap;
private void setBaiduMap(){
    mMapView = (MapView) findViewById(R.id.quyu_baidu_map);
    mBaiduMap = mMapView.getMap();
    //设置为普通地图
    mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
    //将地图放大为100m
    MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(16.0f); // 放大至200米
    // 初始化反地理编码实例
    geoCoder = GeoCoder.newInstance();
    mBaiduMap.setMapStatus(msu);
    /** 添加长按地图监听 */
    mBaiduMap.setOnMapLongClickListener(longListener);
}


2.2:根据经纬度定位

/**
 * 根据经纬度定位
 * @param location
 */
private MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.FOLLOWING;//当前定位的模式
private void locationMap(double lontitude , double latitude){
    // 开启定位图层
    mBaiduMap.setMyLocationEnabled(true);
    // 构造定位数据
    MyLocationData locData = new MyLocationData.Builder()
            .accuracy(RADIUS)
            // 此处设置开发者获取到的方向信息,顺时针0-360
            .direction(0).latitude(latitude)
            .longitude(lontitude).build();
    // 设置定位数据
    mBaiduMap.setMyLocationData(locData);
    // 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标)
    BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
            .fromResource(R.drawable.icon_weizhi_2x_1);
    MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker);
    mBaiduMap.setMyLocationConfigeration(config);

}

2.3:地图长按事件的监听(更多请见百度地图事件监听

/**
 * 地图长按事件监听回调函数
 * @param point 长按的地理坐标
 */
BaiduMap.OnMapLongClickListener longListener = new BaiduMap.OnMapLongClickListener() {
    public void onMapLongClick(LatLng point){
        Toast.makeText(WuRaoQuYuUpdateActivity.this, "长按地图获取的 经度 = "+point.longitude+"\n纬度 = "+point.latitude,Toast.LENGTH_SHORT).show();
        // 反地理位置编译
        latlngToAddress(point);

    }
};

/**
 * 反地理位置编译
 * @param latlng
 */
private void latlngToAddress(final LatLng latlng) {
    // 设置反地理经纬度坐标,请求位置时,需要一个经纬度
    geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latlng));

    //设置地址或经纬度反编译后的监听,这里有两个回调方法,
    geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {

        /** 经纬度转换成地址 */
        @Override
        public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
            if (result == null ||  result.error != SearchResult.ERRORNO.NO_ERROR) {
                Toast.makeText(WuRaoQuYuUpdateActivity.this, "找不到该地址!",Toast.LENGTH_SHORT).show();
            }
            String address = result.getAddress();
	    Toast.makeText(WuRaoQuYuUpdateActivity.this , "长按地图获取的位置 = " + address , Toast.LENGTH_SHORT).show();
            // 长按改变地址 将获得经纬度再地图显示
            locationMap(latlng.longitude , latlng.latitude);
        }
        
        /**  把地址转换成经纬度 */
        @Override
        public void onGetGeoCodeResult(GeoCodeResult result) {

        }
    });
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值