android百度定位方式,Android 百度定位SDK

1.获取AK

发布版:

keytool -v -list -keystore key.jks

SHA1:A9:7D:70:70:4C:67:83:71:AC:FD:18:6E:EF:9B:08:FF:CF:07:A6:BD

开发版:

keytool -v -list -keystore debug.keystore

SHA1:39:FC:60:2A:FA:CB:BF:6C:79:CA:98:58:C6:2F:F8:58:FE:56:24:2F

2.创建定位测试项目

1)AndroidManifest.xml

增加权限,声明service和ak鉴权

2)导入项目所需的jar包和so

BaiduLBS_Android.jar

libBaiduMapSDK_base_v4_5_2.so

libBaiduMapSDK_map_v4_5_2.so

liblocSDK7b.so

在app的build.gradle android{}中说明so为该libs路径

android {

...

sourceSets {

main {

jniLibs.srcDir 'libs'

}

}

}

3.定位流程

1)初始化LocationClient类

LocationClient类最好在主线程中声明,需要Context类型的参数。

Context需要时全进程有效的Context,推荐用getApplicationConext获取全进程有效的Context

mLocClient=new LocationClient(getApplicationContext()); mLocClient.registerLocationListener(listener);

2)配置SDK参数

LocationClientOption option = new LocationClientOption();

option.setIsNeedAddress(true);//是否要地址

option.setOpenGps(true);

option.setCoorType("bd09ll"); // 设置坐标类型

option.setScanSpan(1000);//可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的

mLocClient.setLocOption(option);

mLocClient.start();

3)实现BDAbstractLocationListener接口

Android定位SDK自v7.2版本起,对外提供了Abstract类型的监听接口BDAbstractLocationListener,用于实现定位监听。原有BDLocationListener暂时保留,推荐开发者升级到Abstract类型的新监听接口使用,该接口会异步获取定位结果

@Override

public void onReceiveLocation(BDLocation bdLocation) {

Log.i("bdmap","定位类型:"+bdLocation.getLocTypeDescription()+"\n"

+"纬度:"+bdLocation.getLatitude()+"\n"

+"经度:"+bdLocation.getLongitude()+"\n"

+"详细地址:"+bdLocation.getAddrStr()+"\n"

+"卫星数目"+bdLocation.getSatelliteNumber());

}

输出:

I/bdmap: 定位类型:GPS location successful!

纬度:30.555669

经度:104.075068

详细地址:中国四川省成都市武侯区G213(xxxxxx)

卫星数目4

4.增加Mark

LatLng ll = new LatLng(bdLocation.getLatitude(),

bdLocation.getLongitude());

BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_openmap_mark);

// 构建MarkerOption,用于在地图上添加Marker

OverlayOptions option = new MarkerOptions()

.position(ll) //mark出现的位置

.icon(bitmap) //mark图标

.draggable(true);//mark可拖动

//在地图上添加Marker并显示

mBaiduMap.addOverlay(option);

//对Marker的点击事件

mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {

@Override

public boolean onMarkerClick(Marker marker) {

//获取marker中的数据

double lat = marker.getPosition().latitude;

double log = marker.getPosition().longitude;

Toast.makeText(getApplication(),

"经度"+log+" 纬度"+lat,Toast.LENGTH_LONG)

.show();

return false;

}

});

5.Demo

0b8b4499ad1a05c425cc1130d1731b83.gif

public class MainActivity extends AppCompatActivity {

private MapView mMapView = null;

private BaiduMap mBaiduMap = null;

boolean isFirstLoc = true; // 是否首次定位

LocationClient mLocClient;

private MyLocationData locData; //定位数据包

private Marker marker;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

SDKInitializer.initialize(getApplicationContext());

setContentView(R.layout.activity_main);

mMapView = (MapView)findViewById(R.id.bmapView);

mBaiduMap = mMapView.getMap();

//设置类型

mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(17));

// 开启定位图层

mBaiduMap.setMyLocationEnabled(true);

mLocClient = new LocationClient(getApplicationContext());

mLocClient.registerLocationListener(listener);

LocationClientOption option = new LocationClientOption();

option.setIsNeedAddress(true);//是否要地址

option.setOpenGps(true);

option.setCoorType("bd09ll"); // 设置坐标类型

option.setScanSpan(1000);//可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的

mLocClient.setLocOption(option);

mLocClient.start();

//对Marker的点击事件

mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {

@Override

public boolean onMarkerClick(Marker marker) {

//获取marker中的数据

double lat = marker.getPosition().latitude;

double log = marker.getPosition().longitude;

Toast.makeText(getApplication(),

"经度"+log+" 纬度"+lat,Toast.LENGTH_LONG)

.show();

return false;

}

});

//Map点击事件,点击地图移除marker

mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {

@Override

public void onMapClick(LatLng latLng) {

marker.remove();//移除marker

}

@Override

public boolean onMapPoiClick(MapPoi mapPoi) {

return false;

}

});

}

/*** * 定位结果回调,在此方法中处理定位结果 */

BDAbstractLocationListener listener = new BDAbstractLocationListener() {

@Override

public void onReceiveLocation(BDLocation bdLocation) {

Log.i("bdmap","定位类型:"+bdLocation.getLocTypeDescription()+"\n"

+"纬度:"+bdLocation.getLatitude()+"\n"

+"经度:"+bdLocation.getLongitude()+"\n"

+"详细地址:"+bdLocation.getAddrStr()+"\n"

+"卫星数目"+bdLocation.getSatelliteNumber());

//构造定位数据

locData = new MyLocationData.Builder()

.accuracy(bdLocation.getRadius())

.latitude(bdLocation.getLatitude())

.longitude(bdLocation.getLongitude())

.build();

mBaiduMap.setMyLocationData(locData);

if (isFirstLoc) {

isFirstLoc = false;

LatLng ll = new LatLng(bdLocation.getLatitude(),

bdLocation.getLongitude());

BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_openmap_mark);

// 构建MarkerOption,用于在地图上添加Marker

OverlayOptions option = new MarkerOptions()

.position(ll) //mark出现的位置

.icon(bitmap) //mark图标

.draggable(true);//mark可拖动

//在地图上添加Marker并显示

marker = (Marker) mBaiduMap.addOverlay(option);

MapStatus.Builder builder = new MapStatus.Builder();

builder.target(ll).zoom(17.0f);

mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));

}

}

};

@Override

protected void onDestroy() {

//退出时销毁定位

mLocClient.stop();

//关闭定位图层

mBaiduMap.setMyLocationEnabled(false);

mMapView.onDestroy();

mMapView = null;

super.onDestroy();

}

@Override

protected void onResume() {

super.onResume();

mMapView.onResume();

}

@Override

protected void onPause() {

super.onPause();

mMapView.onPause();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值