分類:C#、Android、VS201五、百度地圖應用; 建立日期:2016-02-04android
調啓百度地圖是指:利用SDK接口,可直接在本地打開百度地圖客戶端或WebApp實現地圖功能。 目前支持調啓的功能有:POI周邊檢索、POI詳情頁面、步行線路規劃、駕車線路規劃、公交線路規劃、駕車導航、步行導航、騎行導航(步行、騎行需百度地圖App 8.6.6以上版本才支持)。api
簡介:介紹若是利用簡單接口調用,開啓百度地圖客戶端實現複雜邏輯業務。app
詳述:ide
(1)調啓百度地圖導航(Native);ui
(2)調啓百度地圖POI周邊檢索;this
(3)調啓百度地圖POI詳情檢索;spa
(4)調啓百度地圖步行線路規劃;設計
(5)調啓百度地圖駕車線路規劃;code
(6)調啓百度地圖公交線路規劃;xml
(7)調啓百度地圖步行導航;(需百度地圖App 8.6.6以上版本支持)
(8)調啓百度地圖騎行導航(需百度地圖App 8.6.6以上版本支持)
做爲本章的最後一個例子,再也不詳細截取每一個子功能的效果圖了(因爲模擬器沒有安裝百度地圖客戶端,沒法看到效果圖,只有在安裝了百度地圖客戶端的真實手機上才能看到效果圖),所以這裏僅截取了在模擬器中運行時本章的主導航界面和本例子的導航界面。
一、添加demo25_open_baidumap.xml文件
在layout文件夾下添加該文件。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <View android:layout_width="fill_parent" android:layout_height="1dip" android:background="?android:attr/listDivider" /> <ListView android:id="@+id/listView_openBaiduMap" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
二、添加Demo25OpenBaiduMap.cs文件
在SrcSdkDemos文件夾下添加該文件,而後將代碼改成下面的內容:
using System; using System.Collections.Generic; using Android.App; using Android.OS; using Android.Widget; using Android.Views; using Com.Baidu.Mapapi.Navi; using Com.Baidu.Mapapi.Model; using Com.Baidu.Mapapi.Utils; using Com.Baidu.Mapapi.Utils.Poi; using Com.Baidu.Mapapi.Utils.Route; namespace BdMapV371Demos.SrcSdkDemos { /// <summary> /// 此demo用來展現如何在地圖繪製的每幀中再額外繪製一些用戶本身的內容 /// </summary> [Activity(Label = "@string/demo_name_open_baidumap")] public class Demo25OpenBaiduMap : Activity { // 天安門座標 double mLat1 = 39.915291; double mLon1 = 116.403857; // 百度大廈座標 double mLat2 = 40.056858; double mLon2 = 116.308194; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.demo25_open_baidumap); ListView mListView = FindViewById<ListView>(Resource.Id.listView_openBaiduMap); mListView.Adapter = new OpenBaiduMapListAdapter(this, GetData()); mListView.ItemClick += (s, e) => { switch (e.Position) { case 0: startNavi(); break; case 1: startPoiNearbySearch(); break; case 2: startPoiDetails(); break; case 3: startRoutePlanWalking(); break; case 4: startRoutePlanDriving(); break; case 5: startRoutePlanTransit(); break; case 6: startWalkingNavi(); break; case 7: startBikingNavi(); break; default: break; } }; } private List<string> GetData() { List<string> data = new List<string>() { "啓動百度地圖導航(Native)", "啓動百度地圖Poi周邊檢索", "啓動百度地圖Poi詳情頁面", "啓動百度地圖步行路線規劃", "啓動百度地圖駕車路線規劃", "啓動百度地圖公交路線規劃", "啓動百度地圖步行導航", "啓動百度地圖騎行導航" }; return data; } /// <summary>啓動百度地圖導航(Native)</summary> public void startNavi() { LatLng pt1 = new LatLng(mLat1, mLon1); LatLng pt2 = new LatLng(mLat2, mLon2); NaviParaOption para = new NaviParaOption() .InvokeStartPoint(pt1).InvokeEndPoint(pt2) .InvokeStartName("天安門").InvokeEndName("百度大廈"); try { BaiduMapNavigation.OpenBaiduMapNavi(para, this); } catch (BaiduMapAppNotSupportNaviException e) { ShowDialog(e.Message); } } /// <summary>啓動百度地圖步行導航(Native)</summary> public void startWalkingNavi() { LatLng pt1 = new LatLng(mLat1, mLon1); LatLng pt2 = new LatLng(mLat2, mLon2); NaviParaOption para = new NaviParaOption() .InvokeStartPoint(pt1).InvokeEndPoint(pt2) .InvokeStartName("天安門").InvokeEndName("百度大廈"); try { BaiduMapNavigation.OpenBaiduMapWalkNavi(para, this); } catch (BaiduMapAppNotSupportNaviException e) { ShowDialog(e.Message); } } /// <summary>啓動百度地圖騎行導航(Native)</summary> public void startBikingNavi() { LatLng pt1 = new LatLng(mLat1, mLon1); LatLng pt2 = new LatLng(mLat2, mLon2); NaviParaOption para = new NaviParaOption() .InvokeStartPoint(pt1).InvokeEndPoint(pt2) .InvokeStartName("天安門").InvokeEndName("百度大廈"); try { BaiduMapNavigation.OpenBaiduMapBikeNavi(para, this); } catch (BaiduMapAppNotSupportNaviException e) { ShowDialog(e.Message); } } /// <summary>啓動百度地圖Poi周邊檢索</summary> public void startPoiNearbySearch() { LatLng ptCenter = new LatLng(mLat1, mLon1); // 天安門 PoiParaOption para = new PoiParaOption() .InvokeKey("天安門") .InvokeCenter(ptCenter) .InvokeRadius(2000); try { BaiduMapPoiSearch.OpenBaiduMapPoiNearbySearch(para, this); } catch (Exception e) { ShowDialog(e.Message); } } /// <summary>啓動百度地圖Poi詳情頁面</summary> public void startPoiDetails() { PoiParaOption para = new PoiParaOption().InvokeUid("65e1ee886c885190f60e77ff"); // 天安門 try { BaiduMapPoiSearch.OpenBaiduMapPoiDetialsPage(para, this); } catch (Exception e) { ShowDialog(e.Message); } } /// <summary>啓動百度地圖步行路線規劃</summary> public void startRoutePlanWalking() { LatLng ptStart = new LatLng(34.264642646862, 108.95108518068); LatLng ptEnd = new LatLng(mLat2, mLon2); RouteParaOption para = new RouteParaOption() .InvokeStartPoint(ptStart) .InvokeEndName("大雁塔") .InvokeCityName("西安"); try { BaiduMapRoutePlan.OpenBaiduMapWalkingRoute(para, this); } catch (Exception e) { ShowDialog(e.Message); } } /// <summary>啓動百度地圖駕車路線規劃</summary> public void startRoutePlanDriving() { LatLng ptStart = new LatLng(34.264642646862, 108.95108518068); LatLng ptEnd = new LatLng(mLat2, mLon2); RouteParaOption para = new RouteParaOption() .InvokeStartPoint(ptStart) .InvokeEndName("大雁塔") .InvokeCityName("西安"); try { BaiduMapRoutePlan.OpenBaiduMapDrivingRoute(para, this); } catch (Exception e) { ShowDialog(e.Message); } } /// <summary>啓動百度地圖公交路線規劃</summary> public void startRoutePlanTransit() { LatLng ptStart = new LatLng(mLat1, mLon1); LatLng ptEnd = new LatLng(mLat2, mLon2); RouteParaOption para = new RouteParaOption() .InvokeStartName("天安門").InvokeEndPoint(ptStart) .InvokeBusStrategyType(RouteParaOption.EBusStrategyType.BusRecommendWay); try { BaiduMapRoutePlan.OpenBaiduMapTransitRoute(para, this); } catch (Exception e) { ShowDialog(e.Message); } } protected override void OnDestroy() { base.OnDestroy(); BaiduMapNavigation.Finish(this); BaiduMapRoutePlan.Finish(this); BaiduMapPoiSearch.Finish(this); } /// <summary>提示未安裝百度地圖app或app版本太低</summary> public void ShowDialog(string message) { AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog dialog = null; builder.SetMessage("您還沒有安裝百度地圖app或app版本太低,點擊確認安裝?"); builder.SetTitle("提示"); builder.SetPositiveButton("確認", delegate { dialog.Dismiss(); OpenClientUtil.GetLatestBaiduMapApp(this); }); builder.SetNegativeButton("取消", delegate { dialog.Dismiss(); }); dialog = builder.Create(); dialog.Show(); } private class OpenBaiduMapListAdapter : BaseAdapter { List<string> list; Demo25OpenBaiduMap a; public OpenBaiduMapListAdapter(Demo25OpenBaiduMap a, List<string> list) { this.a = a; this.list = list; } public override int Count { get { return list.Count; } } public override View GetView(int position, View convertView, ViewGroup parent) { convertView = View.Inflate(a, Resource.Layout.demo_info_item, null); TextView title = convertView.FindViewById<TextView>(Resource.Id.title); TextView desc = convertView.FindViewById<TextView>(Resource.Id.desc); desc.Visibility = ViewStates.Invisible; title.Text = list[position]; return convertView; } public override Java.Lang.Object GetItem(int position) { return list[position]; } public override long GetItemId(int position) { return position; } } } }
三、修改MainActivity.cs文件
在MainActivity.cs文件的demos字段定義中,去掉【示例25】下面的註釋。
在手機上運行觀察調啓效果。