1,申请key

​https://lbs.qq.com/console/key.html​

2,配置环境

a,配置sdk

下载jar包 ​​TencentLocationSdk_v7.1.5​​ (点击链接可直接下载)

解压得到以下路径:
Android 腾讯地图定位_腾讯地图定位

我们要用到的是​​libs​​​目录下的​​so​​​包 和 ​​sdk​​​ ​​jar​​​包
Android 腾讯地图定位_腾讯地图定位_02Android 腾讯地图定位_腾讯地图定位_03
很简单,sdk jar包拷到项目中的libs目录下,并 选中 > 右键 > Add As Library,没有libs目录就新建,与​​​src​​目录同级。

so包拷到jniLibs 目录下,没有jniLibs 目录就新建,在main目录下,与​​java​​目录同级。

b,配置 manifest

添加权限:

<!-- 通过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:

<application>
...
<meta-data android:name="TencentMapSDK" android:value="您申请的Key" />
</application>

混淆(用就加,不用就不加,不知道就不加):

-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,建议先获取位置权限,之前已获取的可以跳过

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,创建监听

/**
* 开启定位监听器
*/
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,定位回调

/**
* 位置更新时的回调
*
* @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 等级确定的
Android 腾讯地图定位_腾讯地图_04

ok,到这里就完成基本定位了,但是也要做好善后工作。

d,删除位置监听器

@Override
protected void onDestroy() {
super.onDestroy();
//删除位置监听器
TencentLocationManager locationManager = TencentLocationManager.getInstance(this);
locationManager.removeUpdates(this);
}



ok 基本功能完成, 更多 ​​查看官方文档​