Android---手机定位功能
由于自己在做项目的时候应用到了手机定位功能,自己也是琢磨了好长时间,一开始用的百度地图,研究了几天总是出现一些不同的Bug,而且很难修复,然后又想用手机自带的那个GPS自动定位,但是我发现手机不同,它定的位置也不是很准确,最后,我选择了腾讯定位,我借鉴与网上腾讯地图开发的教程,Bug一点一点的解决,最后定位终于实现了。
我给大家解析一下定位功能主要部分代码的实现。
一、搭配环境
1.在腾讯地图开发者平台上注册一个账号,下载一个sdkjar包,或者TencentLocationSDK_v6.2.5.1
2.解压包,在菜单栏Java中新建一个文件夹,然后拷贝相应目录下的so文件。如图:
3.将开发包中的 TencentLocationSDK_v4.3.0_r196568.jar 文件,拷贝到目标工程中的 libs 目录下。如图:
二、申请且配置key
在开发者平台上申请一个密钥配置在自己的清单文件中
三、定位所需要的权限设置
Android开发使用接口,调用系统功能,一定会应用到一定的访问权限。牢记、牢记!!!!!!!(我就是一开始忘了,找了半天bug)权限如下:
<!-- 通过GPS得到精确位置 -->
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 通过网络得到粗略位置 -->
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 访问网络,某些位置信息需要从网络服务器获取 -->
<uses-permissionandroid:name="android.permission.INTERNET"/>
<!-- 访问WiFi状态,需要WiFi信息用于网络定位 -->
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 修改WiFi状态,发起WiFi扫描, 需要WiFi信息用于网络定位 -->
<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- 访问网络状态, 检测网络的可用性,需要网络运营商相关信息用于网络定位 -->
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/>
<!-- 访问手机当前状态, 需要某些信息用于网络定位 -->
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>(借鉴与腾讯地图开发者平台)
四、主要代码的实现
TencentLocationRequest request = TencentLocationRequest.create();
request.setInterval(20000)
.setRequestLevel(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION)
.setAllowCache(true);
//开启定位监听器
init(request);
}
public void init(TencentLocationRequest request) {
Context context = this;
TencentLocationListener listener = this;
TencentLocationManager locationManager = TencentLocationManager.getInstance(context);
int error = locationManager.requestLocationUpdates(request, listener);
if (error == 0) {
Log.v("this", "注册位置监听器成功!");
} else {
Log.v("this", "注册位置监听器失败!");
}
}
@Override
public void onLocationChanged(TencentLocation location, int error, String reason) {
// TODO Auto-generated method stub
if (TencentLocation.ERROR_OK == error) {
// 定位成功
Log.v("this", "定位成功!");
if (location != null) {
String lat = String.valueOf(location.getLatitude());
String lon = String.valueOf(location.getLongitude());
String address = location.getAddress();
ut3.setText(lat);
ut5.setText(lon);
ut7.setText(address);
//关闭当前activity
// textView.setText("当前经纬度:"+lat+","+lon+nation+province+city+district+town+village+street+streetNo);
}
} else {
// 定位失败
Log.v("this", "定位失败!");
}
}
@Override
public void onStatusUpdate(String arg0, int arg1, String arg2) {
// TODO Auto-generated method stub
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//关闭定位监听器
TencentLocationManager locationManager =
TencentLocationManager.getInstance(this);
locationManager.removeUpdates(this);
}(若有不懂,给小编留言,或者参考腾讯地图定位开发者平台)
主要步骤:开启定位监听器---读取定位值---关闭定位监听器
以上就是定位功能的具体实现和详细的解析。