1. 程式人生 > >Android 使用百度LBS SDK

Android 使用百度LBS SDK

類似百度應用引擎,使用百度的LBS服務,首先我們在百度開放服務平臺建立一個應用,如下圖:


進入應用詳情,然後點選“LBS服務”,設定應用:


數字簽名的獲取方式,可以在Eclipse(ADT 22)中檢視,Window->Preferences->Android->Build,SHA1 fingerprint就是我們需要的:


Android SDK安全碼組成:數字簽名+;+包名。

接著下載LBS Android SDK,然後按照百度官方文件的方法進行操作:

第一步:在工程裡新建libs資料夾,將開發包裡的baidumapapi_vX_X_X.jar拷貝到libs根目錄下,將libBaiduMapSDK_vX_X_X.so拷貝到libs\armeabi目錄下(官網demo裡已有這兩個檔案,如果要整合到自己的工程裡,就需要自己新增),拷貝完成後的工程目錄如下圖所示;

注:liblocSDK3.so和locSDK_3.1.jar為百度定位SDK所使用資源,開發者可根據實際需求自行新增。

android_dev1.png

第二步:在工程屬性->Java Build Path->Libraries中選擇“Add External JARs”,選定baidumapapi_vX_X_X.jar,確定後返回。

通過以上兩步操作後,您就可以正常使用百度地圖SDK為您提供的全部功能了。

注意:由於adt外掛升級,若您使用Eclipse adt 22的話,需要對開發環境進行相應的設定,方法如下:

1. 在Eclipse 中選中工程,右鍵選 Properties->Java Build Path->Order and Export 使 Android Private Libraries處於勾選狀態;

2. Project -> clean-> clean all .


然後在我們的應用中配置相關許可權和Key:

(1)在application中新增開發金鑰:

<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="開發者 key" />  
</application>

(2)新增所需許可權
<uses-permission android:name="android.permission.GET_ACCOUNTS" />  
<uses-permission android:name="android.permission.USE_CREDENTIALS" />  
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />  
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
<uses-permission android:name="android.permission.READ_PHONE_STATE" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.BROADCAST_STICKY" />  
<uses-permission android:name="android.permission.WRITE_SETTINGS" />  
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
(3)佈局
<com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" />

(4)在應用程式建立時初始化 SDK引用的Context 全域性變數:

public class MainActivity extends Activity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各元件之前初始化context資訊,傳入ApplicationContext  
        //注意該方法要再setContentView方法之前實現  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
    }  
}



(5)管理地圖生命週期:
public class MainActivity extends Activity {  
    MapView mMapView = null;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各元件之前初始化context資訊,傳入ApplicationContext  
        //注意該方法要再setContentView方法之前實現  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
        //獲取地圖控制元件引用  
        mMapView = (MapView) findViewById(R.id.bmapView);  
    }  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理  
        mMapView.onDestroy();  
    }  
    @Override  
    protected void onResume() {  
        super.onResume();  
        //在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理  
        mMapView.onResume();  
        }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        //在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理  
        mMapView.onPause();  
        }  
    }

到這裡就可以顯示地圖了,但是隻能顯示北京,並沒有定位,明天總結一下定位的實現。


昨天初步接觸了百度的LBS SDK,讓應用可以通過MapView顯示地圖,今天在昨天的程式碼基礎上,實現一下定位功能:

首先看一下效果圖吧:


左下角的按鈕可以切換模式,分為三種:

普通(LocationMode.NORMAL)、

跟隨(LocationMode.FOLLOWING)、

羅盤(LocationMode.COMPASS),相信用過百度地圖的同學對這幾個模式不陌生吧。

下面是程式碼:

分別宣告一個MapView和BaiduMap:

	private MapView mMapView;
	private BaiduMap mBaiduMap;

在SetContentView之前要初始化SDK:
SDKInitializer.initialize(getApplicationContext());

更換定點陣圖標的方法:
mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo); // 自定義圖示
// mCurrentMarker =null ; // 預設圖示
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));

定位模式:
private LocationMode mCurrentMode;
mCurrentMode = LocationMode.NORMAL; // 普通模式
// mCurrentMode = LocationMode.FOLLOWING; // 跟隨模式
// mCurrentMode = LocationMode.COMPASS; // 羅盤模式
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));

初始化:

// 地圖初始化
		mMapView = (MapView) findViewById(R.id.bmapView);
		mBaiduMap = mMapView.getMap();
		// 開啟定點陣圖層
		mBaiduMap.setMyLocationEnabled(true);
		// 定位初始化
		mLocClient = new LocationClient(this);
		mLocClient.registerLocationListener(myListener);
		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(true);// 開啟gps
		option.setCoorType("bd09ll"); // 設定座標型別
		option.setScanSpan(5000);
		mLocClient.setLocOption(option);
		mLocClient.start();

setScanSpan是定位時間間隔(ms),setCoorType座標型別分為三種:

bd09ll 百度加密經緯度座標

bd09 百度加密墨卡託座標

gcj02 國測局加密經緯度座標

定位SDK監聽函式:

public class MyLocationListenner implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			// map view 銷燬後不在處理新接收的位置
			if (location == null || mMapView == null)
				return;
			MyLocationData locData = new MyLocationData.Builder()
					.accuracy(location.getRadius())
					// 此處設定開發者獲取到的方向資訊,順時針0-360
					.direction(100).latitude(location.getLatitude())
					.longitude(location.getLongitude()).build();
			mBaiduMap.setMyLocationData(locData);
			if (isFirstLoc) {
				isFirstLoc = false;
				LatLng ll = new LatLng(location.getLatitude(),
						location.getLongitude());
				MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
				mBaiduMap.animateMapStatus(u);
			}
		}

		public void onReceivePoi(BDLocation poiLocation) {
		}
	}
複寫onPause,onResume,onDestory:
@Override
	protected void onPause() {
		mMapView.onPause();
		super.onPause();
	}

	@Override
	protected void onResume() {
		mMapView.onResume();
		super.onResume();
	}

	@Override
	protected void onDestroy() {
		// 退出時銷燬定位
		mLocClient.stop();
		// 關閉定點陣圖層
		mBaiduMap.setMyLocationEnabled(false);
		mMapView.onDestroy();
		mMapView = null;
		super.onDestroy();
	}
AndroidManifest.xml中宣告Service,這一步很關鍵,不寫則無法定位:
 <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>

當然,Key也是不可或缺,而且必須正確的:
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="************************" />

最後,在AndroidManifest.xml檔案中要加入需要的許可權:
<!-- For BaiduMap SDK START -->
    <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </permission>

    <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >
    </uses-permission>
    <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" >
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_GPS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <!-- SDK1.5需要android.permission.GET_TASKS許可權判斷本程式是否為當前執行的應用? -->
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.CAMERA" >
    </uses-permission>
    <uses-permission android:name="android.permission.RECORD_AUDIO" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <!-- 來電消音 -->
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <!-- For BaiduMap SDK END -->


到此就大功告成了。

記錄軌跡思路

  1. 用Service獲取經緯度,onCreate中開始採集經緯度點,儲存到ArrayList
  2. 每隔5秒取樣一次,若經緯度未發生變化,丟棄該次取樣
  3. 在onDestroy中,將ArrayList轉成JSON格式,然後儲存到SDCard中

顯示軌跡思路

  1. 讀取目錄下所有軌跡檔案,並生成ListView
  2. 在OnItemClick中將檔名稱通過intent.putExtra傳遞給顯示軌跡的Activity
  3. 根據檔名將對應的JSON內容轉成ArrayList
  4. 然後將以上ArrayList的點集依次連線,並繪製到百度地圖上
  5. 設定起始點Marker,Zoom級別,中心點為起始點
  6. 軌跡點小於2個無法繪製軌跡,給出提示

初步Demo效果圖,獲取的經緯度有偏移,明天看看哪裡的問題:

LBS

先貼一個儲存經緯度點的Service的核心程式碼:

public class RouteRecordService extends Service {
    private LocationClient mLocationClient;
    private final String ROUTE_PATH = "/sdcard/Route/";
    private String startTime = "";
    private String stopTime = "";

    private List<RoutePoint> list = new ArrayList<RoutePoint>();
    private RouteAdapter adapter = new RouteAdapter();

    private int startId = 1; // 軌跡點初始ID
    private int defaultDelay = 5000; // 軌跡點取樣間隔時間:ms
    private final static double ERROR_CODE = 55.555;
    private double routeLng;
    private double routeLat;

    private boolean isEncrypt = false; // true:讀取百度加密經緯度 false:讀取裝置提供經緯度
    private boolean isDebug = true;

    // 裝置定位經緯度
    private enum DeviceLocType {
        LATITUDE, LONGITUDE
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        InitLocation(LocationMode.Hight_Accuracy, "gcj02", 1000, false);
        // 初始化路徑
        File filestoreMusic = new File(ROUTE_PATH);
        if (!filestoreMusic.exists()) {
            filestoreMusic.mkdir();
        }
        startTime = getTimeStr();
        if (isDebug) {
            Toast.makeText(getApplicationContext(), "Start Record Route",
                    Toast.LENGTH_SHORT).show();
        }

        // 開啟軌跡記錄執行緒
        new Thread(new RouteRecordThread()).start();
    }

    public class RouteRecordThread implements Runnable {

        @Override
        public void run() {
            while (true) {
                try {
                    Thread.sleep(defaultDelay);
                    Message message = new Message();
                    message.what = 1;
                    recordHandler.sendMessage(message);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    final Handler recordHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 1:
                startRecordRoute();
            }
            super.handleMessage(msg);
        }
    };

    private void startRecordRoute() {
        // 獲取裝置經緯度
        if (!isEncrypt) {
            routeLat = getDeviceLocation(DeviceLocType.LATITUDE);
            routeLng = getDeviceLocation(DeviceLocType.LONGITUDE);
            if (isDebug)
                Toast.makeText(getApplicationContext(),
                        "Device Loc:" + routeLat + "," + routeLng,
                        Toast.LENGTH_SHORT).show();
        }

        RoutePoint routePoint = new RoutePoint();
        if (routeLng != 5.55 && routeLat != 5.55) {
            if (list.size() > 0
                    && list.get(list.size() - 1).getLat() == routeLat
                    && (list.get(list.size() - 1).getLng() == routeLng)) {
                if (isDebug) {
                    // Toast.makeText(getApplicationContext(),
                    // "Route not change",
                    // Toast.LENGTH_SHORT).show();
                }
            } else {
                routePoint.setId(startId++);
                routePoint.setLng(routeLng);
                routePoint.setLat(routeLat);
                list.add(routePoint);
            }
        }
    }

    /**
     * 獲取裝置提供的經緯度,Network或GPS
     * 
     * @param type
     *            請求經度還是緯度
     * @return
     */
    private double getDeviceLocation(DeviceLocType type) {
        double deviceLat = ERROR_CODE;
        double deviceLng = ERROR_CODE;

        LocationManager locationManager = (LocationManager) getSystemService(getApplicationContext().LOCATION_SERVICE);
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            Location location = locationManager
                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if (location != null) {
                deviceLat = location.getLatitude();
                deviceLng = location.getLongitude();
            } else {
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER, 1000, 0,
                        new deviceLocationListener());
                Location location1 = locationManager
                        .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (location1 != null) {
                    deviceLat = location1.getLatitude(); // 經度
                    deviceLng = location1.getLongitude(); // 緯度
                }
            }
        } else {
            locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, 1000, 0,
                    new deviceLocationListener());
            Location location = locationManager
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            if (location != null) {
                deviceLat = location.getLatitude(); // 經度
                deviceLng = location.getLongitude(); // 緯度
            }
        }
        if (type == DeviceLocType.LATITUDE)
            return deviceLat;
        else if (type == DeviceLocType.LONGITUDE)
            return deviceLng;
        else
            return ERROR_CODE;
    }

    /**
     * 裝置位置監聽器
     * 
     */
    class deviceLocationListener implements LocationListener {

        // Provider的狀態在可用、暫時不可用和無服務三個狀態直接切換時觸發此函式
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        // Provider被enable時觸發此函式,比如GPS被開啟
        @Override
        public void onProviderEnabled(String provider) {

        }

        // Provider被disable時觸發此函式,比如GPS被關閉
        @Override
        public void onProviderDisabled(String provider) {
        }

        // 當座標改變時觸發此函式,如果Provider傳進相同的座標,它就不會被觸發
        @Override
        public void onLocationChanged(Location location) {
            // routeLat = location.getLatitude(); // 經度
            // routeLng = location.getLongitude(); // 緯度
        }
    };

    private String getTimeStr() {
        long nowTime = System.currentTimeMillis();
        Date date = new Date(nowTime);
        String strs = "" + ERROR_CODE;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
            strs = sdf.format(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strs;
    }

    /**
     * 初始化軌跡檔案路徑和名稱
     * 
     * @return String
     */
    private String getFilePath() {
        stopTime = getTimeStr();
        String format = ".json";
        if (isDebug)
            format = ".txt";
        return ROUTE_PATH + startTime + "-" + stopTime + format;
    }

    class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            // 讀取百度加密經緯度
            if (isEncrypt) {
                routeLng = location.getLongitude();
                routeLat = location.getLatitude();
            }
        }
    }

}

優化軌跡平滑度:

同一資料,優化前後效果對比: 
LBS

優化演算法:

public List<RoutePoint> optimizePoints(List<RoutePoint> inPoint) {
        int size = inPoint.size();
        List<RoutePoint> outPoint;

        int i;
        if (size < 5) {
            return inPoint;
        } else {
            // Latitude
            inPoint.get(0)
                    .setLat((3.0 * inPoint.get(0).getLat() + 2.0
                            * inPoint.get(1).getLat() + inPoint.get(2).getLat() - inPoint
                            .get(4).getLat()) / 5.0);
            inPoint.get(1)
                    .setLat((4.0 * inPoint.get(0).getLat() + 3.0
                            * inPoint.get(1).getLat() + 2
                            * inPoint.get(2).getLat() + inPoint.get(3).getLat()) / 10.0);

            inPoint.get(size - 2).setLat(
                    (4.0 * inPoint.get(size - 1).getLat() + 3.0
                            * inPoint.get(size - 2).getLat() + 2
                            * inPoint.get(size - 3).getLat() + inPoint.get(
                            size - 4).getLat()) / 10.0);
            inPoint.get(size - 1).setLat(
                    (3.0 * inPoint.get(size - 1).getLat() + 2.0
                            * inPoint.get(size - 2).getLat()
                            + inPoint.get(size - 3).getLat() - inPoint.get(
                            size - 5).getLat()) / 5.0);

            // Longitude
            inPoint.get(0)
                    .setLng((3.0 * inPoint.get(0).getLng() + 2.0
                            * inPoint.get(1).getLng() + inPoint.get(2).getLng() - inPoint
                            .get(4).getLng()) / 5.0);
            inPoint.get(1)
                    .setLng((4.0 * inPoint.get(0).getLng() + 3.0
                            * inPoint.get(1).getLng() + 2
                            * inPoint.get(2).getLng() + inPoint.get(3).getLng()) / 10.0);

            inPoint.get(size - 2).setLng(
                    (4.0 * inPoint.get(size - 1).getLng() + 3.0
                            * inPoint.get(size - 2).getLng() + 2
                            * inPoint.get(size - 3).getLng() + inPoint.get(
                            size - 4).getLng()) / 10.0);
            inPoint.get(size - 1).setLng(
                    (3.0 * inPoint.get(size - 1).getLng() + 2.0
                            * inPoint.get(size - 2).getLng()
                            + inPoint.get(size - 3).getLng() - inPoint.get(
                            size - 5).getLng()) / 5.0);
        }
        return inPoint;
    }

擷取軌跡圖片並分享

這裡寫圖片描述
這裡寫圖片描述

@@ -1,14 +1,24 @@
package com.zms.baidulbs;
+import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.util.EncodingUtils;
import android.app.Activity;
+import android.content.Intent;
import android.content.SharedPreferences;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.net.Uri;
import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
import android.widget.Button;
import android.widget.Toast;
@@ -24,6 +34,7 @@
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.PolylineOptions;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
+import com.baidu.mapapi.map.BaiduMap.SnapshotReadyCallback;
import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
import com.baidu.mapapi.model.LatLng;
import com.zms.baidulbs.R;
@@ -34,11 +45,13 @@
private InfoWindow mInfoWindow;
private Marker mMarkerStart;
private Marker mMarkerEnd;
+   private Button btnShare, btnBack;
public double mRouteLatitude = 0.0;
public double mRouteLongitude = 0.0;
private final String ROUTE_PATH = "/sdcard/Route/";
+   private String filePath = "";
private RouteAdapter routeAdapter = new RouteAdapter();
// 初始化全域性 bitmap 資訊,不用時及時 recycle
@@ -51,13 +64,22 @@
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
+   requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.route_show);
-   String filePath = "";
+   // Hide Status Bar
+   View decorView = getWindow().getDecorView();
+   decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
+
+   btnShare = (Button) findViewById(R.id.btnShare);
+   btnBack = (Button) findViewById(R.id.btnBack);
+   btnShare.setOnClickListener(new MyOnClickListener());
+   btnBack.setOnClickListener(new MyOnClickListener());
+
Bundle extras = getIntent().getExtras();
if (extras != null) {
filePath = extras.getString("filePath");
-   setTitle(filePath.substring(0, filePath.length() - 4));
+   // setTitle(filePath.substring(0, filePath.length() - 
            
           

相關推薦

Android 使用LBS SDK

類似百度應用引擎,使用百度的LBS服務,首先我們在百度開放服務平臺建立一個應用,如下圖: 進入應用詳情,然後點選“LBS服務”,設定應用: 數字簽名的獲取方式,可以在Eclipse(ADT 22)中檢視,Window->Preferences->Andro

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

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

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

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

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

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

Android 地圖sdk 標註圖marker中可以切換顯示不同內容

記錄一個前段時間解決的功能需求 先直接上圖片看看實現後的效果: 具體需求為,在地圖頁上顯示出所有的場站marker之後,點選左側的按鈕可以實現動態切換場站marker中顯示的資料。 實現思路為:構造marker時,icon方法中傳入的引數Bit

Android地圖SDK 導航初始化和地圖初始化引起的衝突

       如題,同樣是百度地圖SDK開發過程中遇到的一個問題,交代下背景:        開發了一款內嵌百度地圖的應用,因此裡面差不多將目前百度地圖SDK開放的主要功能都用到了,定位,地圖顯示,覆蓋物標示,POI搜尋,行程路線規劃,GPS導航。。等等都有。開發最開始用到

Android 鷹眼軌跡SDK(v2.1.6)

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

android 接入地圖sdk

專案需求: 接入地圖 定位位置 設定百度地圖上的各種圖示 載入方格的問題 接入地圖 1.建立應用 接入的是百度地圖,首先去百度地圖開放平臺上新增應用。在http://lbsyun.baidu.com/apicon

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

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

【月入41萬】Mono For Android中使用地圖SDK

    藉助於Mono For Android技術,.Net開發者也可以使用自己熟悉的C#語言以及.Net來開發Android應用。由於Mono For Android把Android SDK中絕大部分類庫都已經實現,基本直接參考Java開發Android的書就可以掌握Mono for android技術。

Android 定位及地圖SDK

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

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使用地圖SDK獲取定位資訊

本文使用Android Studio開發。 獲取定位資訊相對簡單,我們只需要如下幾步: 第三步,建立Android Studio工程(略過不說),配置環境: 將解壓後的檔案放入libs資料夾下,並在src/main下建立一個叫做jniLibs的資料

Android Studio中用地圖SDK做地圖時遇到的一個問題

在Android Studio中用百度地圖SDK做地圖時,可能會遇到這種情況:做基本地圖和標註物時,執行正常,可就是做定位的時候,初始化語句報錯: SDKInitializer.initialize(

Android使用地圖SDK實現定位與方向感測器匹配

public class MylocationListener implements BDLocationListener { //定位請求回撥介面 private boolean isFirstIn=true; //定位請求回撥函式,這裡面會得到定位資

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

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

android 地圖(具體請看開放平臺)

int over layout tco pap 平臺 jar pil inter compile files(‘libs/BaiduLBS_Android.jar‘) compile ‘com.android.support:appcompat-v7:26.+‘

基於地圖SDK和Elasticsearch GEO查詢的地理圍欄分析系統(3)-前端實現

方便 復制 類型 復制代碼 自動跳轉 rar 窗口 stack delete 轉載自:http://www.cnblogs.com/Auyuer/p/8086975.html MoonLight可視化訂單需求區域分析系統實現功能:   在現實生活中,計算機和互聯網迅速發展,

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

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