弱龄寄事外,委怀在琴书。这篇文章主要讲述android使用百度地图SDK获取定位信息相关的知识,希望能为你提供帮助。
本文使用android Studio开发。
获取定位信息相对简单,
我们只需要如下几步:
第一步,
注册百度账号,
在百度地图开放平台新建应用、生成API_KEY。这些就不细说了,
请前往这里:
http://lbsyun.baidu.com/index.php?title=
android-locsdk/guide/key
第二步,
下载sdk,
地址:
http://lbsyun.baidu.com/index.php?title=
android-locsdk/geosdk-android-download
第三步,
建立Android Studio工程(
略过不说)
,
配置环境:
将解压后的文件放入libs文件夹下,
并在src/main下建立一个叫做jniLibs的文件夹,
并把解压后内的文件夹靠进去,
如下图:
文章图片
文章图片
第四步, 将BaiduLBS_Android.jar加入环境变量( 右键, Add As Library) , 并在app的build.gradle中的android中添加:
sourceSets {
main {
jniLibs.srcDirs =
['
libs'
]
}
}
如图:
文章图片
第五步, 在AndroidManifest.xml文件中声明权限:
<
uses-permission android:name=
"
android.permission.INTERNET"
/>
<
uses-permission android:name=
"
android.permission.ACCESS_WIFI_STATE"
/>
<
uses-permission android:name=
"
android.permission.ACCESS_NETWORK_STATE"
/>
<
!--网络定位-->
<
uses-permission android:name=
"
android.permission.ACCESS_COARSE_LOCATION"
/>
<
!--GPS定位-->
<
uses-permission android:name=
"
android.permission.ACCESS_FINE_LOCATION"
/>
并在application标签中添加如下内容:
<
meta-data
android:name=
"
com.baidu.lbsapi.API_KEY"
android:value=
"
你申请的API key"
/>
<
service
android:name=
"
com.baidu.location.f"
android:enabled=
"
true"
android:process=
"
:remote"
/>
【android使用百度地图SDK获取定位信息】第六步, 测试代码, 获取定位信息:
public class MainActivity extends AppCompatActivity {public LocationClient mLocationClient =
null;
public BDLocationListener myListener =
new MyLocationListener();
@
Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startLocate();
}/**
* 定位
*/
private void startLocate() {
mLocationClient =
new LocationClient(getApplicationContext());
//声明LocationClient类
mLocationClient.registerLocationListener(myListener);
//注册监听函数
LocationClientOption option =
new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving
);
//可选,
默认高精度,
设置定位模式,
高精度,
低功耗,
仅设备
option.setCoorType("
bd09ll"
);
//可选,
默认gcj02,
设置返回的定位结果坐标系
int span =
1000;
option.setScanSpan(span);
//可选,
默认0,
即仅定位一次,
设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);
//可选,
设置是否需要地址信息,
默认不需要
option.setOpenGps(true);
//可选,
默认false,设置是否使用gps
option.setLocationNotify(true);
//可选,
默认false,
设置是否当GPS有效时按照1S/1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);
//可选,
默认false,
设置是否需要位置语义化结果,
可以在BDLocation.getLocationDescribe里得到,
结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);
//可选,
默认false,
设置是否需要POI结果,
可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);
//可选,
默认true,
定位SDK内部是一个SERVICE,
并放到了独立进程,
设置是否在stop的时候杀死这个进程,
默认不杀死
option.SetIgnoreCacheException(false);
//可选,
默认false,
设置是否收集CRASH信息,
默认收集
option.setEnableSimulateGps(false);
//可选,
默认false,
设置是否需要过滤GPS仿真结果,
默认需要
mLocationClient.setLocOption(option);
//开启定位
mLocationClient.start();
}private class MyLocationListener implements BDLocationListener {@
Override
public void onReceiveLocation(BDLocation location) {
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) {// GPS定位结果
sb.append("
\\nspeed : "
);
sb.append(location.getSpeed());
// 单位:
公里每小时
sb.append("
\\nsatellite : "
);
sb.append(location.getSatelliteNumber());
sb.append("
\\nheight : "
);
sb.append(location.getAltitude());
// 单位:
米
sb.append("
\\ndirection : "
);
sb.append(location.getDirection());
// 单位度
sb.append("
\\naddr : "
);
sb.append(location.getAddrStr());
sb.append("
\\ndescribe : "
);
sb.append("
gps定位成功"
);
} else if (location.getLocType() =
=
BDLocation.TypeNetWorkLocation) {// 网络定位结果
sb.append("
\\naddr : "
);
sb.append(location.getAddrStr());
//运营商信息
sb.append("
\\noperationers : "
);
sb.append(location.getOperators());
sb.append("
\\ndescribe : "
);
sb.append("
网络定位成功"
);
} else if (location.getLocType() =
=
BDLocation.TypeOffLineLocation) {// 离线定位结果
sb.append("
\\ndescribe : "
);
sb.append("
离线定位成功,
离线定位结果也是有效的"
);
} else if (location.getLocType() =
=
BDLocation.TypeServerError) {
sb.append("
\\ndescribe : "
);
sb.append("
服务端网络定位失败,
可以反馈IMEI号和大体定位时间到loc-bugs@
baidu.com,
会有人追查原因"
);
} else if (location.getLocType() =
=
BDLocation.TypeNetWorkException) {
sb.append("
\\ndescribe : "
);
sb.append("
网络不同导致定位失败,
请检查网络是否通畅"
);
} else if (location.getLocType() =
=
BDLocation.TypeCriteriaException) {
sb.append("
\\ndescribe : "
);
sb.append("
无法获取有效定位依据导致定位失败,
一般是由于手机的原因,
处于飞行模式下一般会造成这种结果,
可以试着重启手机"
);
}
sb.append("
\\nlocationdescribe : "
);
sb.append(location.getLocationDescribe());
// 位置语义化信息
List<
Poi>
list =
location.getPoiList();
// POI数据
if (list !=
null) {
sb.append("
\\npoilist size =
: "
);
sb.append(list.size());
for (Poi p : list) {
sb.append("
\\npoi=
: "
);
sb.append(p.getId() +
"
"
+
p.getName() +
"
"
+
p.getRank());
}
}
Log.e("
描述:
"
, sb.toString());
}
}
推荐阅读
- Android Studio引入AAR文件
- Android Intent 教程
- ionic程序在安卓的微信x5内核中发现下拉的select不容易被点击到
- Android--判断listview上下滑动的方法
- ArcGIS for Android地图上实际距离与对应的屏幕像素值计算
- 在Python中生成集合的所有排列
- 回归分析指南(了解逻辑回归)
- 算法题(对数组中的对进行计数,其和可被K整除)
- 二叉树入门原理介绍和实现指南