1,申请key
https://lbs.qq.com/console/key.html
2,配置环境
a,配置sdk
下载jar包 TencentLocationSdk_v7.1.5 (点击链接可直接下载)
解压得到以下路径:
我们要用到的是libs
目录下的so
包 和 sdk
jar
包
很简单,sdk jar包拷到项目中的libs目录下,并 选中 > 右键 > Add As Library,没有libs目录就新建,与src
目录同级。
so包拷到jniLibs 目录下,没有jniLibs 目录就新建,在main目录下,与java
目录同级。
b,配置 manifest
添加权限:
代码语言:javascript复制<!-- 通过GPS得到精确位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 通过网络得到粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 访问网络,某些位置信息需要从网络服务器获取 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问WiFi状态,需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 修改WiFi状态,发起WiFi扫描, 需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 访问网络状态, 检测网络的可用性,需要网络运营商相关信息用于网络定位 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!-- 访问手机当前状态, 需要某些信息用于网络定位 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
加过的就不用重复再加
配置key:
代码语言:javascript复制<application>
...
<meta-data android:name="TencentMapSDK" android:value="您申请的Key" />
</application>
混淆(用就加,不用就不加,不知道就不加):
代码语言:javascript复制-keepclassmembers class ** {
public void on*Event(...);
}
-keep class c.t.**{*;}
-keep class com.tencent.map.geolocation.**{*;}
-keep class com.tencent.tencentmap.lbssdk.service.**{*;}
-dontwarn org.eclipse.jdt.annotation.**
-dontwarn c.t.**
3,开始定位
a,建议先获取位置权限,之前已获取的可以跳过
代码语言:javascript复制RxPermissions rxPermission = new RxPermissions(AddressLocationActivity.this);
rxPermission.requestEach(Manifest.permission.ACCESS_FINE_LOCATION)
.subscribe(new Consumer<Permission>() {
@Override
public void accept(Permission permission) throws Exception {
if (permission.granted) {
// 已经同意该权限
initTencentLocationRequest();
} else {
// 拒绝了该权限
}
}
});
b,创建监听
代码语言:javascript复制 /**
* 开启定位监听器
*/
private void initTencentLocationRequest() {
TencentLocationRequest request = TencentLocationRequest.create();
request.setInterval(30000).setRequestLevel(1).setAllowCache(true);
TencentLocationManager locationManager = TencentLocationManager.getInstance(this);
int error = locationManager.requestLocationUpdates(request, this);
if (error == 0)
LogUtil.i("注册位置监听器成功!");
else
LogUtil.i("注册位置监听器失败!");
}
Activity 实现TencentLocationListener
接口并 实现两个方法 onLocationChanged
和 onStatusUpdate
,前者是位置更新时的回调,后者是GPS和Wi-Fi的状态变化回调。
c,定位回调
代码语言:javascript复制 /**
* 位置更新时的回调
*
* @param tencentLocation 新的位置
* @param i 错误码
* @param s 错误描述
*/
@Override
public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
if (TencentLocation.ERROR_OK == i) {
// 定位成功
if (tencentLocation != null) {
String lat = String.valueOf(tencentLocation.getLatitude());
String lon = String.valueOf(tencentLocation.getLongitude());
LogUtil.i(lat "---" lon);
}
} else {
// 定位失败
}
}
定位成功之后,我们可以在TencentLocation 对象中获取我们需要的信息,而TencentLocation 中信息的有效性是根据setRequestLevel 等级确定的
ok,到这里就完成基本定位了,但是也要做好善后工作。
d,删除位置监听器
代码语言:javascript复制 @Override
protected void onDestroy() {
super.onDestroy();
//删除位置监听器
TencentLocationManager locationManager = TencentLocationManager.getInstance(this);
locationManager.removeUpdates(this);
}
ok 基本功能完成, 更多 查看官方文档