1. 程式人生 > >Android 百度定位及地圖SDK

Android 百度定位及地圖SDK

一 、Android 百度定位SDK

1 、開發文件

1.2:配置環境:

1.2.1 :新增庫檔案

a) 在 相關下載下載最新 庫檔案。

b)使用Eclipse開發的開發者,將SO檔案的壓縮檔案解壓出來,把對應架構下的SO檔案放入開發者自己APP的對應架構下的資料夾中(建議全部放入以提高程式相容性);將JAR檔案拷貝到工程的libs目錄下,這樣即可在程式中使用Android定位SDK。

  c)使用AndroidStutio的開發者除了上述操作外,還需要在build.gradle中配置SO檔案的使用,如下所示:

sourceSets {
        main {
    		jniLibs.srcDirs
= ['libs']
        }
}

如果開發的是系統應用,除了需要在工程中配置SO檔案,還需要手動把對應架構的SO檔案拷貝到/system/lib下,如果是64位系統,則需要將64位的SO檔案拷貝到/sytem/lib64下。

注意:新版本的定位SDK,開發者除了要更新JAR包之外,同時需要關注SO檔案是否有更新。如果SO檔名稱改變,即SO檔案有更新,開發者要及時替換掉老版本,否則會導致定位失敗。

1.2.2 : 配置AndroidManifest檔案

a) 在Application標籤中宣告Service元件,每個App都應該有單獨一個定位Service。

<
service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>

b) 宣告使用許可權

<!-- 這個許可權用於進行網路定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 這個許可權用於訪問GPS定位-->
<uses-permission android:
name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用於訪問wifi網路資訊,wifi資訊會用於進行網路定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 獲取運營商資訊,用於支援提供運營商資訊相關的介面--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 這個許可權用於獲取wifi的獲取許可權,wifi資訊會用來進行網路定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 用於讀取手機當前的狀態--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!-- 寫入擴充套件儲存,向擴充套件卡寫入資料,用於寫入離線定位資料--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 訪問網路,網路定位需要上網--> <uses-permission android:name="android.permission.INTERNET" /> <!-- SD卡讀取許可權,使用者寫入離線定位資料--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
c) 設定Acess key
<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="AK" />       //key:開發者申請的Key

2、程式碼整合

2.1 :建立定位LocationClient物件並初始化設定

    /**
     * 建立定位物件
     */
 private LocationClient locationService;     
    public void onStartLocation() {
        locationService = new LocationClient(getApplicationContext().getApplicationContext());
//        設定定位引數
setLocationOption();
//        定位回撥
locationService.registerLocationListener(mListener);
//        開啟定位
//        locationService.start();
}
   /**
     * 設定定位引數
     */
private void setLocationOption(){
        LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//設定高精度定位定位模式
option.setOpenGps(true);
option.setCoorType("bd09ll");//設定百度經緯度座標系格式
//        option.setScanSpan(1000*3);//設定發起定位請求的間隔時間為3秒 , 預設0,即僅定位一次,option.setIsNeedAddress(true);//反編譯獲得具體位置,只有網路定位才可以
option.setAddrType("all");
locationService.setLocOption(option);
}

   /**
     * 定位回撥
     */
private BDLocationListener mListener = new BDLocationListener() { public void onReceiveLocation(BDLocation location) {}}

a):設定引數每間隔多少s定位一次: option.setScanSpan(1000*3)

b):開始定位:locationService.start()

c):停止定位:locationService.stop()

二 、Android 百度地圖SDK

1、開發文件

1.1:在libs目錄下新增 .jar包

工程配置還需要把jar包整合到自己的工程中,放入libs目錄下。對於每個jar檔案,右鍵-選擇Add As Library,匯入到工程中。對應在build.gradle生成工程所依賴的jar檔案說明。

1.2:在libs目錄下新增.so檔案

在libs目錄下放入對應不同CPU架構的so檔案。這樣工程並不會自動載入libs下的so,需在gradle編譯時,通過加入程式碼:

jniLibs.srcDir 'libs' 來說明so的路徑為該libs路徑。

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

2、程式碼整合

2.1:初始化地圖

/**
 * 關於地圖
 */
private MapView mMapView ;
private BaiduMap mBaiduMap;
private void setBaiduMap(){
    mMapView = (MapView) findViewById(R.id.quyu_baidu_map);
mBaiduMap = mMapView.getMap();
//設定為普通地圖
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//將地圖放大為100m
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(16.0f); // 放大至200米
    // 初始化反地理編碼例項
geoCoder = GeoCoder.newInstance();
mBaiduMap.setMapStatus(msu);
/** 新增長按地圖監聽 */
mBaiduMap.setOnMapLongClickListener(longListener);
}

2.2:根據經緯度定位

/**
 * 根據經緯度定位
 * @param location
*/
private MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.FOLLOWING;//當前定位的模式
private void locationMap(double lontitude , double latitude){
    // 開啟定點陣圖層
mBaiduMap.setMyLocationEnabled(true);
// 構造定位資料
MyLocationData locData = new MyLocationData.Builder()
            .accuracy(RADIUS)
            // 此處設定開發者獲取到的方向資訊,順時針0-360
.direction(0).latitude(latitude)
            .longitude(lontitude).build();
// 設定定位資料
mBaiduMap.setMyLocationData(locData);
// 設定定點陣圖層的配置(定位模式,是否允許方向資訊,使用者自定義定點陣圖標)
BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
            .fromResource(R.drawable.icon_weizhi_2x_1);
MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker);
mBaiduMap.setMyLocationConfigeration(config);
}

/**
 * 地圖長按事件監聽回撥函式
 * @param point 長按的地理座標
 */
BaiduMap.OnMapLongClickListener longListener = new BaiduMap.OnMapLongClickListener() {
    public void onMapLongClick(LatLng point){
        Toast.makeText(WuRaoQuYuUpdateActivity.this, "長按地圖獲取的 經度 = "+point.longitude+"\n緯度 = "+point.latitude,Toast.LENGTH_SHORT).show();
// 反地理位置編譯latlngToAddress(point);
}
};

/**
 * 反地理位置編譯
 * @param latlng
*/
private void latlngToAddress(final LatLng latlng) {
    // 設定反地理經緯度座標,請求位置時,需要一個經緯度
geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latlng));
//設定地址或經緯度反編譯後的監聽,這裡有兩個回撥方法,
geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {

        /** 經緯度轉換成地址 */
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
            if (result == null ||  result.error != SearchResult.ERRORNO.NO_ERROR) {
                Toast.makeText(WuRaoQuYuUpdateActivity.this, "找不到該地址!",Toast.LENGTH_SHORT).show();
}
            String address = result.getAddress();
    Toast.makeText(WuRaoQuYuUpdateActivity.this , "長按地圖獲取的位置 = " + address , Toast.LENGTH_SHORT).show();
// 長按改變地址 將獲得經緯度再地圖顯示
locationMap(latlng.longitude , latlng.latitude);
}
        
        /**  把地址轉換成經緯度 */
@Override
public void onGetGeoCodeResult(GeoCodeResult result) {

        }
    });
}

相關推薦

Android 定位地圖SDK

一 、Android 百度定位SDK 1 、開發文件 1.2:配置環境: 1.2.1 :新增庫檔案 a) 在 相關下載下載最新 庫檔案。 b)使用Eclipse開發的開發者,將SO檔案的壓縮檔案解壓出來,把對應架構下的SO檔案放入開發者自己APP的對應架構下的資料夾中

Android定位SDK,返回error code:162 latitude:4.9E-32

今天做專案的時候,獲取程式碼後發現登入功能不好用了,原因是登入前APP會獲取經緯度,原因是經緯度返回的值不正確。研究半天發現百度地圖SDK的.so檔案未能成功載入,開啟libs檔案目錄,發現果然“armeabi”和“armeabi-v7a”資料夾下都為空。應該是不知為何,.

Android 鷹眼軌跡SDK(v2.1.6)

ron 監聽器 dnn info 及其 通知 鷹眼 連續 _id 閑聊 看過《鷹眼追擊》這部電影的讀者一定對“鷹眼”這臺巨無霸計算機印象深刻,如今我們能夠實現自己的鷹眼。 效果圖 本篇為百度地圖SDK第三篇博文 第一篇實現:A

[android] 地圖開發 (一).申請AK顯示地圖解決顯示空白網格問題

定義 gps 官方 應用程序 2.x lns settings sap xmlns 近期做android百度地圖,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so顯示百度地圖時總是遇到問題——僅僅顯示

Android地圖(二)結合方向傳感器我們自己定位哪裏走

troy 真機 pretty 刪除文件 RR tap 大神 素材 near Android百度地圖(二)結合方向傳感器我們自己定位哪裏走 本文代碼在http://b

android地圖基礎定位不用開啟許可權也可以獲取經緯度成功?什麼鬼

最近專案中需要使用百度地圖sdk,發現一個問題,手機未開啟地圖定位許可權,在地圖定位監聽裡面竟然可以返回狀態碼為161的正確定位返回,是不是很神奇。 測試了百度demo,把定位許可權關閉,也是可以定位成功的。看來確實不需要定位許可權,就可以獲取定位資訊呀。 這就讓我暈了,那這個許可權什麼時候

Android地圖開發定位和路線導航

在寫之前要先加入百度地圖sdk的jar包從百度地圖開發者官網上就能下載 百度地圖sdk下載 官網(可翻牆選擇):http://developer.android.com/sdk/index.html 不可翻牆選擇:http://www.androiddevtools.cn/ 而其中用

Android地圖開發之取消後臺持續定位

網上的方法 1:注掉option.setScanSpan(1000);//注掉後只定位一次,感覺不太好 2:呼叫mLocClient.unRegisterLocationListener方法。//取消監聽的方法不讓後臺定位,樓主只成功過一次所以不太靠譜不推薦使用 3 :

Android整合定位SDK實現獲取定位地址

應用場景:實現APP的網路定位功能 1.整合SDK 去百度建立應用,獲取到AK,下載定位SDK,把裡面的jar包新增到libs下。其他os檔案就放在main下新建的jniLilbs裡,如圖: 2.程式碼貼出 package com.jin.baidudemo;

Android 地圖開發(一)如何呼叫地圖介面和在專案中顯示地圖以及實現定位

二、下載百度地圖API庫 然後新增到專案中即可。   三、在專案清單AndroidMainifest.xml配置百度地圖API key和新增相關許可權                         四、在專案呼叫百度地圖專案功能,這篇文章就首先講講顯示地圖和定位的功能 首先

android 地圖SDK 獲取手機附近POI興趣點列表 (過時)

文章內容已經過時~大家去百度官方api學習。 http://developer.baidu.com/map/ http://lbsyun.baidu.com/sdk/download 功能描述:獲取手機自身附近的興趣點(Poi, 之後使用Poi表示興趣點)列表,顯示

Android地圖(三):地圖畫運動軌跡圖層點選事件處理

上篇文章講述瞭如何在地圖顯示位置點,這篇文章主要講述如何在地圖上畫運動軌跡,以及地圖圖層點選事件的處理。 很多運動類的app都有畫出跑步者運動軌跡的需求,拿咕咚來說,我們看一下它的效果圖: 咕咚運動軌跡圖 本篇將要實現的效果 1.跑步結束後,靜態的畫出整個運動

地圖SDK V3.2 和定位SDK V4.2 完成定位功能

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.example.getsmsinfo"  

Android 地圖 SDK v3.0.0 (三) 新增覆蓋物Marker與InfoWindow的使用

上篇部落格已經實現了地圖的定位以及結合了方向感測器使用者路痴定位方向,如果你還不清楚,請檢視:Android 百度地圖 SDK v3.0.0 (二) 定位與結合方向感測器,本章會教大家如何新增覆蓋物,實現周邊搜尋,以及對覆蓋物的點擊出現介紹等效果。效果圖:我們的需求是,當用戶

Android地圖開發學習筆記(二)之定位當前位置和自定義控制元件返回

在完成HelloMap後,接來完成的重要功能是如何定位當前位置和如何一鍵返回。效果圖如下: 這裡的控制元件就是一個ImageView,自己去百度一個好看的圖片就可以了。 一 定位當前位置和自定義控制元件返回 1.官方技術文件 可以先點選百度地圖定位技術文件,仔細看一下相關

Android地圖的搜尋附近地址的檢索

import java.util.List; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.Loc

Android 地圖簡單定位

package com.example.map__; import java.util.List; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.ut

android地圖開發——地圖sdk之基礎地圖

上一節我們介紹了百度定位sdk,這一節我們在定位的基礎上介紹百度地圖sdk。 讓地圖顯示出來 首先把上一節佈局檔案中新增的textview刪掉,然後加入MapView這個控制元件: <?xml version="1.0" encoding="

Android 基於定位sdk ,獲取城市,使用json解析天氣

關於百度定位sdk的使用 參考官方文件 https://lbsyun.baidu.com/index.php?title=android-locsdkJSON 解析 參考了 https://blog.csdn.net/double2hao/article/details/68

android 地圖系列之結合方向感測器的地圖定位

因為這是關於百度地圖的系列部落格,本文章的百度地圖定位在上一篇(android 百度地圖系列之地圖初始化及定位)中已經詳細介紹過,就在上篇部落格的基礎上,新增方向感測器來使定點陣圖標顯示自己在地圖上的方向。 首先需要一張方向朝上的定位標誌圖。(CSDN上傳圖片