天天看點

Android開發-----定位功能的實作----騰訊地圖定位

Android---手機定位功能

      由于自己在做項目的時候應用到了手機定位功能,自己也是琢磨了好長時間,一開始用的百度地圖,研究了幾天總是出現一些不同的Bug,而且很難修複,然後又想用手機自帶的那個GPS自動定位,但是我發現手機不同,它定的位置也不是很準确,最後,我選擇了騰訊定位,我借鑒與網上騰訊地圖開發的教程,Bug一點一點的解決,最後定位終于實作了。

我給大家解析一下定位功能主要部分代碼的實作。

一、搭配環境

1.在騰訊地圖開發者平台上注冊一個賬号,下載下傳一個sdkjar包,或者TencentLocationSDK_v6.2.5.1直接點選連結下載下傳即可。

2.解壓包,在菜單欄Java中建立一個檔案夾,然後拷貝相應目錄下的so檔案。如圖:

Android開發-----定位功能的實作----騰訊地圖定位

3.将開發包中的 TencentLocationSDK_v4.3.0_r196568.jar 檔案,拷貝到目标工程中的 libs 目錄下。如圖:

Android開發-----定位功能的實作----騰訊地圖定位

二、申請且配置key

在開發者平台上申請一個密鑰配置在自己的清單檔案中

三、定位所需要的權限設定

Android開發使用接口,調用系統功能,一定會應用到一定的通路權限。牢記、牢記!!!!!!!(我就是一開始忘了,找了半天bug)權限如下:

<!-- 通過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"

/>(借鑒與騰訊地圖開發者平台)

四、主要代碼的實作

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);
    }(若有不懂,給小編留言,或者參考騰訊地圖定位開發者平台)      

主要步驟:開啟定位監聽器---讀取定位值---關閉定位監聽器

以上就是定位功能的具體實作和詳細的解析。路過的頂一下哦!!嘿嘿

繼續閱讀