Android應用之——百度地圖最新SDK3.0應用,實現最常用的標註覆蓋物以及彈出窗覆蓋物

來源:互聯網
上載者:User

一、概述

最新版的百度地圖SDK3.0,修改了很多方法,之前的很多方法被簡化了,正好在做地圖這一塊,順便就使用了最新版的sdk。

下載官方給的demo,發現變化還是挺大的,之前的一些方法都換了,地圖的初始化也進行了調整。多了好幾個類,具體用法參考下面的例子,詳細的說明可參照官方的說明文檔。

二、

標註覆蓋物:


彈出窗覆蓋物:


三、實現過程

大部分是根據官方給的demo來的。

A、設定檔:

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

    註:liblocSDK3.so和locSDK_3.1.jar為百度定位SDK所使用資源,開發人員可根據實際需求自行添加。

    第二步:在工程屬性->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 .

B、在AndroidManifest中添加開發密鑰、要求的權限等資訊;

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

C、添加一些相應的許可權

<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" /><ses-permission android:name="android.permission.READ_PHONE_STATE" />


D、在布局檔案中,加入百度地圖的自訂控制項

  <com.baidu.mapapi.map.MapView        android:id="@id/mapview_baidu_address"        android:layout_width="match_parent"        android:layout_height="match_parent"        />

E、在應用程式建立時初始化 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);    }}

注意:在SDK各功能組件使用之前都需要調用

SDKInitializer.initialize(getApplicationContext());,因此我們建議該方法放在Application的初始化方法中

F、建立地圖Activity 

不同之前的版本,3.0版的sdk中,mapview對象需要先擷取BaiduMap對象才能由BaiduMap對象進行後續的添加覆蓋物的操作。

protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsetContentView(R.layout.d1_activity_address);super.onCreate(savedInstanceState);mMapView = (MapView) findViewById(R.id.mapview_baidu_address);mBaiduMap = mMapView.getMap();//擷取BaiduMap類 BaiduMap類才可以添加自訂的圖層MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(16.0f);//設定地圖的縮放比例mBaiduMap.setMapStatus(msu);//將前面的參數交給BaiduMap類initOverLay(latitude, longitude);// 繪製圖層showPop();// 彈出popup}

管理地圖生命週期

@Overrideprotected void onPause() {// MapView的生命週期與Activity同步,當activity掛起時需調用MapView.onPause()mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {// MapView的生命週期與Activity同步,當activity恢複時需調用MapView.onResume()mMapView.onResume();super.onResume();} @Override protected void onDestroy() { // MapView的生命週期與Activity同步,當activity銷毀時需調用MapView.destroy() mLocClient.stop(); // 關閉定位元影像層 mBaiduMap.setMyLocationEnabled(false); if (mMapView!=null) { mMapView.onDestroy(); mMapView = null; } // 回收 bitmap 資源 bitmap.recycle(); }

其中繪製覆蓋物,也就是圖層的方法代碼如下:

LatLng這個類 官方文檔的說明是:地理座標基本資料結構

public void initOverLay(double latitude, double longitude) {// 定義Maker座標點LatLng ll = new LatLng(latitude, longitude);// 構建Marker表徵圖BitmapDescriptor bd1 = BitmapDescriptorFactory.fromResource(R.drawable.pin_green);// 構建MarkerOption,用於在地圖上添加MarkerOverlayOptions option = new MarkerOptions().position(ll).icon(bd1);// 在地圖上添加Marker,並顯示mBaiduMap.addOverlay(option);//添加當前分店資訊圖層MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);mBaiduMap.setMapStatus(u);}

彈出窗覆蓋物  點擊覆蓋物,彈出導航挑選清單

public void showPop() {// 建立InfoWindow展示的viewView popup = View.inflate(this, R.layout.pop, null);TextView title = (TextView) popup.findViewById(R.id.tv_title);TextView content = (TextView) popup.findViewById(R.id.tv_content);title.setText(name);content.setText(addr);// 定義用於顯示該InfoWindow的座標點LatLng pt = new LatLng(latitude, longitude);//Point p = mBaiduMap.getProjection().toScreenLocation(pt);// 建立InfoWindow的點擊事件監聽者OnInfoWindowClickListener listener = new OnInfoWindowClickListener() {public void onInfoWindowClick() {// 添加點擊後的事件響應代碼Uri uri = Uri.parse("geo:" + latitude + "," + longitude + "");Intent it = new Intent(Intent.ACTION_VIEW, uri);startActivity(it);}};// 建立InfoWindowInfoWindow mInfoWindow = new InfoWindow(popup, pt, listener);// 顯示InfoWindowmBaiduMap.showInfoWindow(mInfoWindow);}

四、總結

利用百度地圖sdk開發的幾個步驟:

1、匯入jar包和so檔案

2、布局檔案中加入百度地圖控制項,manifest資訊清單檔中,加入響應的許可權,application節點下加入key

3、主activity中setContentView之前加入SDKInitializer.initialize(getApplicationContext());進行初始化

4、得到地圖mapView對象,然後進行其他動作


5、產生覆蓋物(見上面的代碼)


6、產生彈出窗覆蓋物 (見上面的代碼)





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.