Android---手机定位功能

      由于自己在做项目的时候应用到了手机定位功能,自己也是琢磨了好长时间,一开始用的百度地图,研究了几天总是出现一些不同的Bug,而且很难修复,然后又想用手机自带的那个GPS自动定位,但是我发现手机不同,它定的位置也不是很准确,最后,我选择了腾讯定位,我借鉴与网上腾讯地图开发的教程,Bug一点一点的解决,最后定位终于实现了。

我给大家解析一下定位功能主要部分代码的实现。

一、搭配环境

1.在腾讯地图开发者平台上注册一个账号,下载一个sdkjar包,或者TencentLocationSDK_v6.2.5.1

2.解压包,在菜单栏Java中新建一个文件夹,然后拷贝相应目录下的so文件。如图:

Android Guideline 如何定位 android定位功能实现_数据

3.将开发包中的 TencentLocationSDK_v4.3.0_r196568.jar 文件,拷贝到目标工程中的 libs 目录下。如图:

Android Guideline 如何定位 android定位功能实现_android开发_02

二、申请且配置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);
    }(若有不懂,给小编留言,或者参考腾讯地图定位开发者平台)

主要步骤:开启定位监听器---读取定位值---关闭定位监听器

以上就是定位功能的具体实现和详细的解析。