android 集成腾讯地图定位

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

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

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

<!-- 通过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" />

<!-- 访问手机当前状态, 需要device id用于网络定位 -->

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!-- 支持A-GPS辅助定位 -->

<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

<!-- 用于 log 日志 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application>

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

</application>


三、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);

    }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容