快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

永乐国际手机app下载:Android百度地图之定位SDK(v3.1)使用示例(一)



一、应用百度供给的舆图定位办事所需资本:

在百度官网,下载百度舆图定位SDK(Android版),在里面找liblocSDK3.so和locSDK_3.1.jar这两个文件。

下载地址:http://developer.baidu.com/map/geosdk-android-download.htm

二、搭建情况:

1、将liblocSDK3.so文件拷贝到libs/armeabi目录下,将locSDK3.1.jar文件拷贝到libs目录下,并将locSDK3.1.jar导入到工程中。如下图:

2、改动AndroidManifest.xml文件:

a. 在application标签中声明service组件

service

android:enabled="true"android:name="com.baidu.location.f"

android:process=":remote" />

b. 声明所需权限

uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

uses-permission android:name="android.permission.READ_PHONE_STATE" /> uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

uses-permission android:name="android.permission.INTERNET" /> uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

uses-permission android:name="android.permission.READ_LOGS" />

三、详细实现:

1、构建LocationClient类的工具,设置定位参数,并注册实现了BDLocationListener接口的类的工具为监听器。

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

mBDLocationListener = new MyBDLocationListener();

mLocationClient.registerLocationListener(mBDLocationListener);

LocationClientOption option = new LocationClientOption();

// 必要地址信息,设置为其他任何值(string类型,且不能为null)时,都表示无地址信息。option.setAddrType("all");

// 设置是否返回POI的电话和地址等具体信息。默认值为false,即不返回POI的电话和地址信息。option.setPoiExtraInfo(true);

// 设置产品线名称。强烈建议您应用自定义的产品线名称,方便我们今后为您供给更高效准确的定位办事。

option.setProdName("定位我当前的位置");

// 打开GPS,应用gps条件是用户硬件打开gps。默认是不打开gps的。option.setOpenGps(false);

// 定位的光阴距离,单位:ms

// 当所设的整数值大年夜于即是1000(ms)时,定位SDK内部应用准时定位模式。// option.setScanSpan(1000);

// 查询范围,默认值为500,即以当前定位位置为中间的半径大年夜小。

option.setPoiDistance(500);// 禁用启用缓存定位数据

option.disableCache(true);

// 坐标系类型,百度手机舆图对外接口中的坐标系默认是bd09lloption.setCoorType("bd09ll");

// 设置最多可返回的POI个数,默认值为3。因为POI查询对照消费流量,设置最多返回的POI个数,以便节省流量。

option.setPoiNumber(3);

// 设置定位要领的优先级。// 纵然有GPS,而且可用,也仍然会提议收集哀求。这个选项得当瞄正确坐标不是分外敏感,然则盼望获得位置描述的用户。

option.setPrio永乐国际手机app下载rity(LocationClientOption.NetWorkFirst);

mLocationClient.setLocOption(option);

2、提议哀求:

// 提议定位哀求

findViewById(R.id.btn_request).setOnClickListener(new View.OnClickListener() {

@Overridepublic void onClick(View v) {

mLocationClient.start();}

});

// 提议从新定位findViewById(R.id.btn_location).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {if (mLocationClient != null && mLocationClient.isStarted()){

mLocationClient.requestLocation();}

}});

// 提议查询哀求

findViewById(R.id.btn_address).setOnClickListener(new View.OnClickListener() {

@Overridepublic void onClick(View v) {

if (mLocationClient != null && mLocationClient.isStarted()){mLocationClient.requestPoi();

}}

});

3、 编写BDLocationListener接口的实现类,接管异步返回的定位结果和异步返回的POI查询结果。

final class MyBDLocationListener implements BDLocationListener{

@Override

public void onReceiveLocation(BDLocation location) {Log.e(TAG, "---------onReceiveLocation()---------");

if(location == null){

Log.e(TAG, "---------onReceiveLocation------location is NULL----");return;

}

int type = location.getLocType();Log.i(TAG, "当前定位采纳的类型是:type = " + type);

String coorType = location.getCoorType();

Log.i(TAG, "坐标系类型:coorType = " + coorType);

// 判断是否有定位精度半径if(location.hasRadius()){

// 获取定位精度半径,单位是米float accuracy = location.getRadius();

Log.i(TAG, "accuracy = " + accuracy);}

if(location.hasAddr()){

// 获取反地舆编码。 只有应用收集定位的环境下,才能获取当前位置的反地舆编码描述。String address = location.getAddrStr();

Log.i(TAG, "address = " + address);}

String province = location.getProvince();// 获取省份信息

String city = location.getCity();// 获取城市信息String district = location.getDistrict(); // 获取区县信息

Log.i(TAG, "province = " + province);

Log.i(TAG, "city = " + city);Log.i(TAG, "district = " + district);

double latitude = location.getLatitude();

double longitude = location.getLongitude();Log.i(TAG, "latitude = " + latitude);

Log.i(TAG, "longitude = " + longitude);

}

@Overridepublic void onReceivePoi(BDLocation poiLocation) {

Log.e(TAG, "---------onReceivePoi()---------");

if(poiLocation == null){

Log.e(TAG, "---------onReceivePoi------location is NULL----");ret永乐国际手机app下载urn;

}

if(poiLocation.hasPoi()){String poiStr = poiLocation.getPoi();

Log.i(TAG, "poiStr = " + poiStr);

}

if(poiLocation.hasAddr()){// 获取反地舆编码。 只有应用收集定位的环境下,才能获取当前位置的反地舆编码描述。

String address = poiLocation.getAddrStr();Log.i(TAG, "address = " + address);

}}

}

4、定位停止后竣事办事:

if(mLocationClient != null && mLocationClient.isStarted()){

if(mBDLocationListener != null){mLocationClient.unRegisterLocationListener(mBDLocationListener);

}

mLocationClient.stop();mLocationClient = null;

}

四、运行效果图:

1、在3G/2G收集情况下:

点击第一个按钮,Logcat打印的日志如下:

点击第二个按钮,Logcat打印的日志如下:

点击第二个按钮,Logcat打印的日志如下:

点击第三个按钮,Logcat打印的日志如下:

点击第三个按钮,Logcat打印的日志如下:

点击第三个按钮,Logcat打印的日志如下:

2、在wifi情况下:

点击第二个按钮,Logcat打印的日志如下:

点击第三个按钮,Logcat打印的日志如下:

注:我是在屋子里面,也便是说:只能用WIFI或者3G/2G收集粗略切实着实定我当前的位置信息。我用3G/2G收集和WIFI都测过了,每次距离要大年夜于1秒。

经由过程上面的Logcat打印出的结果,我们大年夜致可以得出这样的结论:在WIFI或者3G/2G收集只能粗略切实着实定我当前的位置信息。可能会差很大年夜,也便是说不靠谱。

大年夜家可以自己测测看,呵呵。

完备代码:

package com.android.baidu.map;

import android.app.Activity;

import android.os.Bundle;import android.util.Log;

import android.view.View;

import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;

import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;

/**

* 获取我当前的位置信息。* 瞄正确坐标不是分外敏感,然则盼望获得位置描述。

* @author android_ls*

*/ public class BaiduMapLoactionActivity extends Activity {

private static final String TAG = "BaiduMapLoactionActivity";

private LocationClient mLocationClient;

private MyBDLocationListener mBDLocationList永乐国际手机app下载ener;

@Override

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.main);

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

mBDLocationListener = new MyBDLocationListener();mLocationClient.registerLocationListener(mBDLocationListener);

LocationClientOption option = new LocationClientOption();

// 必要地址信息,设置为其他任何值(string类型,且不能为null)时,都表示无地址信息。

option.setAddrType("all");// 设置是否返回POI的电话和地址等具体信息。默认值为false,即不返回POI的电话和地址信息。

option.setPoiExtraInfo(true);

// 设置产品线名称。强烈建议您应用自定义的产品线名称,方便我们今后为您供给更高效准确的定位办事。option.setProdName("定位我当前的位置");

// 打开GPS,应用gps条件是用户硬件打开gps。默认是不打开gps的。

option.se永乐国际手机app下载tOpenGps(false);

// 定位的光阴距离,单位:ms// 当所设的整数值大年夜于即是1000(ms)时,定位SDK内部应用准时定位模式。

// option.setScanSpan(1000);

// 查询范围,默认值为500,即以当前定位位置为中间的半径大年夜小。option.setPoiDistance(500);

// 禁用启用缓存定位数据option.disableCache(true);

// 坐标系类型永乐国际手机app下载,百度手机舆图对外接口中的坐标系默认是bd09ll

option.setCoorType("bd09ll");

// 设置最多可返回的POI个数,默认值为3。因为POI查询对照消费流量,设置最多返回的POI个数,以便节省流量。option.setPoiNumber(3);

// 设置定位要领的优先级。

// 纵然有GPS,而且可用,也仍然会提议收集哀求。这个选项得当瞄正确坐标不是分外敏感,然则盼望获得位置描述的用户。option.setPriority(LocationClientOption.NetWorkFirst);

mLocationClient.setLocOption(option);

// 提议定位哀求

findViewById(R.id.btn_request).setOnClickListener(new View.OnClickListener() {

@Overridepublic void onClick(View v) {

mLocationClient.start();}

});

// 提议从新定位findViewById(R.id.btn_location).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {if (mLocationClient != null && mLocationClient.isStarted()){

mLocationClient.requestLocation();}

}});

// 提议查询哀求

findViewById(R.id.btn_address).setOnClickListener(new View.OnClickListener() {

@Overridepublic void onClick(View v) {

if (mLocationClient != null && mLocationClient.isStarted()){mLocationClient.requestPoi();

}}

});

}

final class MyBDLocationListener implements BDLocationListener{

@Overridepublic void onReceiveLocation(BDLocation location) {

Log.e(TAG, "---------onReceiveLocation()---------");

if(location == null){Log.e(TAG, "---------onReceiveLocation------location is NULL----");

return;}

int type = location.getLocType();

Log.i(TAG, "当前定位采纳的类型是:type = " + type);

String coorType = location.getCoorType();Log.i(TAG, "坐标系类型:coorType = " + coorType);

// 判断是否有定位精度半径

if(location.hasRadius()){// 获取定位精度半径,单位是米

float accuracy = location.getRadius();Log.i(TAG, "accuracy = " + accuracy);

}

if(location.hasAddr()){// 获取反地舆编码。 只有应用收集定位的环境下,才能获取当前位置的反地舆编码描述。

String address = location.getAddrStr();Log.i(TAG, "address = " + address);

}

String province = location.getProvince();// 获取省份信息String city = location.getCity();// 获取城市信息

String district = location.getDistrict(); // 获取区县信息

Log.i(TAG, "province = " + province);Log.i(TAG, "city = " + city);

Log.i(TAG, "district = " + district);

double latitude = location.getLatitude();double longitude = location.getLongitude();

Log.i(TAG, "latitude = " + latitude);Log.i(TAG, "longitude = " + longitude);

}

@Override

public void onReceivePoi(BDLocation poiLocation) {

Log.e(TAG, "---------onReceivePoi()---------");

if(poiLocation == null){Log.e(TAG, "---------onReceivePoi------location is NULL----");

return;}

if(poiLocation.hasPoi()){

String poiStr = poiLocation.getPoi();Log.i(TAG, "poiStr = " + poiStr);

}

if(poiLocation.hasAddr()){

// 获取反地舆编码。 只有应用收集定位的环境下,才能获取当前位置的反地舆编码描述。String address = poiLocation.getAddrStr();

Log.i(TAG, "address = " + address);}

}}

@Override

protected void onDestroy() {if(mLocationClient != null && mLocationClient.isStarted()){

if(mBDLocationListener != null){mLocationClient.unRegisterLocationListener(mBDLocationListener);

}

mLocationClient.stop();mLocationClient = null;

}

super.onDestroy();}

}

转自:http://blog.csdn.net/android_ls/article/details/8583437

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: