android 集成腾讯地图定位

本文只教学定位功能,需要搜索、2D或3D地图的可以到腾讯地图开发平台看api文档,链接:[腾讯地图](https://lbs.qq.com/)

一、到腾讯地图开发平下载定位sdk,快速入口:[腾讯地图定位](https://lbs.qq.com/mobile/androidLocationSDK/androidGeoDownload)

二、在项目的AndroidManiFest文件加入权限和配置AppKey

   


三、Android Studio配置工程** Android Studio的配置方式有两种:

方法1:

a)在libs主动添加so文件和SDK(如果项目有聊天或其他的so文件冲突的话,可以把他们放在一起,我也是这样,目前来看没什么bug)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200616111353317.PNG)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200616111037775.PNG)

b)在 build.gradle 文件的 dependencies 中配置


  implementation fileTree(include: ['*.jar'], dir: 'libs')

  //腾讯地图定位

  implementation files('libs/TencentLocationSdk_v7.2.6.jar')


方法二:

Gradle配置引用

a)修改根目录gradle配置


llprojects {

    repositories {

        jcenter()

        google()

        mavenCentral()

    }

}

b)修改工程目录gradle配置

在 build.gradle 文件的 dependencies 中增加配置

implementation 'com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.2.6'

四、代码混淆

在proguard-rules.pro文件加入代码混淆(复制粘贴即可)


-keepclassmembers class ** {

    public void on*Event(...);

}

-keep class c.t.**{*;}

-keep class com.tencent.map.geolocation.**{*;}

-dontwarn  org.eclipse.jdt.annotation.**

-dontwarn  c.t.**


五、接下就是代码了


public class LocationActivity extends BaseActivity implements TencentLocationListener {

    private static final int MY_PERMISSION_REQUEST_CODE = 10000;

    private TencentLocationRequest request;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_location);

        initdata();

    }

    public void initdata() {

        checkPermission();

    }

    public void setLocation() {

        request = TencentLocationRequest.create();

        request.setInterval(60000);//设置定位周期(位置监听器回调周期), 单位为 ms (毫秒)

        request.setRequestLevel(REQUEST_LEVEL_POI); // 0:包含经纬度,1:包含经纬度, 位置名称, 位置地址,3:包含经纬度,位置所处的中国大陆行政区划,4:包含经纬度,位置所处的中国大陆行政区划及周边POI列表

        request.setAllowGPS(true);

        request.setAllowDirection(true);

        request.setIndoorLocationMode(true);

        TencentLocationListener listener = this;

        TencentLocationManager locationManager = TencentLocationManager.getInstance(LocationActivity.this);

        int error = locationManager.requestLocationUpdates(request, listener);

        if (error == 0) {

            //注册位置监听器成功

        } else {

            //注册位置监听器失败keytool -v -list -keystore

            locationNowlocation.setText("定位失败");

        }

    }

    @Override

    public void onLocationChanged(TencentLocation tencentLocation, int error, String s) {

        if (TencentLocation.ERROR_OK == error) { // 定位成功

            //定位成功

            if (tencentLocation != null) {

                String address = tencentLocation.getCity();

                locationNowlocation.setText(address);

            }

        } else { // 定位失败

            Tools.ToastTextThread(LocationActivity.this, "定位失败");

        }

    }

    @Override

    public void onStatusUpdate(String name, int status, String desc) {

        /*if (name.equals("GPS")) {

            if (status == 0) {

                Tools.ToastTextThread(LocationActivity.this, "GPS关闭");

            }

        }*/

    }

    public void checkPermission() {

        //检查是否有相应的权限,根据自己需求,进行添加相应的权限

        boolean isAllGranted = checkPermissionAllGranted(

                new String[]{

                        Manifest.permission.ACCESS_COARSE_LOCATION

                }

        );

        // 如果这3个权限全都拥有, 则直接执行备份代码

        if (isAllGranted) {

            setLocation();

        } else {

            // 一次请求多个权限, 如果其他有权限是已经授予的将会自动忽略掉

            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSION_REQUEST_CODE);

        }

    }

    /**

    * 检查是否拥有指定的所有权限

    */

    private boolean checkPermissionAllGranted(String[] permissions) {

        for (String permission : permissions) {

            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {

                // 只要有一个权限没有被授予, 则直接返回 false

                return false;

            }

        }

        return true;

    }

    @Override

    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == MY_PERMISSION_REQUEST_CODE) {

            boolean isAllGranted = true;

            // 判断是否所有的权限都已经授予了

            for (int grant : grantResults) {

                if (grant != PackageManager.PERMISSION_GRANTED) {

                    isAllGranted = false;

                    break;

                }

            }

            if (isAllGranted) {

                // 所有的权限都授予

                setLocation();

            } else {

                // 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮

                setLocationDialog("");

            }

        }

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        //关闭定位监听器

        TencentLocationManager locationManager = TencentLocationManager.getInstance(this);

        locationManager.removeUpdates(this);

    }

}

你可能感兴趣的:(android 集成腾讯地图定位)