Android 百度地图 简单实现--- 美食搜索


依赖包:

添加 Android 百度依赖包:

1  key:

 <!--        开发者 key -->
  1. <meta-data  
  2.     android:name="com.baidu.lbsapi.API_KEY"  
  3.     android:value=" 申请的Key" />  


2 权限:
  1. <!-- baimap 权限 -->  
  2.    <uses-permission android:name="android.permission.GET_ACCOUNTS" />  
  3.    <uses-permission android:name="android.permission.USE_CREDENTIALS" />  
  4.    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />  
  5.    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />  
  6.    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  7.    <uses-permission android:name="android.permission.INTERNET" />  
  8.    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  
  9.    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  10.    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  11.    <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  12.    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  13.    <uses-permission android:name="android.permission.BROADCAST_STICKY" />  
  14.    <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
  15.    <uses-permission android:name="android.permission.READ_PHONE_STATE" />  


3 代码:

  1. package com.example.loveyoulmap;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.app.Activity;  
  6. import android.graphics.Color;  
  7. import android.os.Bundle;  
  8. import android.util.Log;  
  9. import android.view.Menu;  
  10. import android.webkit.WebSettings;  
  11. import android.webkit.WebView;  
  12. import android.webkit.WebViewClient;  
  13. import android.widget.Button;  
  14. import android.widget.Toast;  
  15.   
  16. import com.baidu.mapapi.SDKInitializer;  
  17. import com.baidu.mapapi.map.BaiduMap;  
  18. import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;  
  19. import com.baidu.mapapi.map.BitmapDescriptor;  
  20. import com.baidu.mapapi.map.BitmapDescriptorFactory;  
  21. import com.baidu.mapapi.map.InfoWindow;  
  22. import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;  
  23. import com.baidu.mapapi.map.MapView;  
  24. import com.baidu.mapapi.map.Marker;  
  25. import com.baidu.mapapi.map.MarkerOptions;  
  26. import com.baidu.mapapi.map.OverlayOptions;  
  27. import com.baidu.mapapi.model.LatLng;  
  28. import com.baidu.mapapi.overlayutil.PoiOverlay;  
  29. import com.baidu.mapapi.search.core.PoiInfo;  
  30. import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;  
  31. import com.baidu.mapapi.search.poi.PoiCitySearchOption;  
  32. import com.baidu.mapapi.search.poi.PoiDetailResult;  
  33. import com.baidu.mapapi.search.poi.PoiDetailSearchOption;  
  34. import com.baidu.mapapi.search.poi.PoiResult;  
  35. import com.baidu.mapapi.search.poi.PoiSearch;  
  36.   
  37. public class MainActivity extends Activity {  
  38.   
  39. //  MapView  
  40.     private MapView mapView;  
  41. //  百度地图   MapView.getMap();  
  42.     private BaiduMap baiduMap;  
  43. //  Poi  搜索  
  44.     private PoiSearch poiSearch;  
  45. //  webView 显示详情  
  46.     private WebView webView;  
  47.   
  48.     @Override  
  49.     protected void onCreate(Bundle savedInstanceState) {  
  50.         super.onCreate(savedInstanceState);  
  51.   
  52. //       去掉标题的显示(就是app 最顶上的显示内容!)  
  53.         requestWindowFeature(1);  
  54.   
  55.         // 在使用SDK各组件之前初始化context信息,传入ApplicationContext  
  56.         // 注意该方法要再setContentView方法之前实现  
  57.         SDKInitializer.initialize(getApplicationContext());  
  58.   
  59.         setContentView(R.layout.activity_main);  
  60.   
  61.         // 获取 MapView  
  62.         mapView = (MapView) this.findViewById(R.id.map);  
  63.         webView = (WebView) this.findViewById(R.id.webview);  
  64.           
  65. //      初始化  poiSearch 对象!  
  66.         poiSearch = PoiSearch.newInstance();  
  67.           
  68.         // 获取地图视图:  
  69.         baiduMap = mapView.getMap();  
  70.   
  71.         baiduMap.setTrafficEnabled(true);  
  72.         //  
  73.         baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);  
  74.   
  75.         baiduMap.setMaxAndMinZoomLevel(15, 19);  
  76.   
  77.         // 1 创建当前位置的标志  
  78.         setOnePointToMap();  
  79.   
  80.         // 2 设置为 点击事件:  
  81.         setPointListener();  
  82.   
  83.         // 3 获取 兴趣点: 搜索服务!  
  84.         getPoiResourse();  
  85.   
  86.     }  
  87.       
  88.   
  89.         /**  
  90.          *  //TODO 1 创建当前位置的标志  
  91.          */  
  92.         private void setOnePointToMap() {  
  93.   
  94.             // 2 描述其  
  95.             BitmapDescriptor descriptor = BitmapDescriptorFactory  
  96.                     .fromResource(R.drawable.ic_launcher);  
  97.   
  98.             // 3 位置 纬经度  
  99.             // 116.396364,39.916097  
  100.             LatLng latLng = new LatLng(39.916097, 116.396364);  
  101.   
  102.             // 1 覆盖一层 透视的 图层!  
  103.             OverlayOptions overlayOptions = new MarkerOptions().title("北京站")  
  104.                     .icon(descriptor).position(latLng);  
  105.   
  106.             // 向地图添加一个 Overlay  
  107.             baiduMap.addOverlay(overlayOptions);  
  108.               
  109.         }  
  110.   
  111.           
  112.         /**  
  113.          *  //TODO  2 设置 当前位置的  点击事件   弹出视图!  
  114.          */  
  115.         private void setPointListener() {  
  116.   
  117. //          baiduMap 的 覆盖物 被点击! 触发该 事件。  
  118.             baiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {  
  119.   
  120.                 @Override  
  121.                 public boolean onMarkerClick(Marker marker) {  
  122.                       
  123.                     // TODO 开启检索:  实在 点击之后触发的事件。  所搜方式: 城市内搜索!  
  124.                     poiSearch.searchInCity(new PoiCitySearchOption().keyword("美食")  
  125.                             .city("北京").pageNum(0).pageCapacity(10));  
  126.   
  127.                     Button btn = new Button(getApplicationContext());  
  128.                     btn.setBackgroundColor(Color.RED);  
  129.                     btn.setText(marker.getTitle());  
  130.   
  131.                     // btn 变成 View 图片  
  132.                     BitmapDescriptor descriptor = BitmapDescriptorFactory  
  133.                             .fromView(btn);  
  134.   
  135.                     /**  
  136.                      * 弹窗的点击事件:  
  137.                      *  - InfoWindow 展示的bitmap position   
  138.                      *  - InfoWindow 显示的地理位置  
  139.                      *  - InfoWindow Y 轴偏移量 listener   
  140.                      *  - InfoWindow 点击监听者  
  141.                      *  InfoWindow 点击的时候 消失。  
  142.                      * */  
  143.                     InfoWindow infoWindow = new InfoWindow(descriptor, marker  
  144.                             .getPosition(), -60, new OnInfoWindowClickListener() {  
  145.   
  146.                         public void onInfoWindowClick() {  
  147.                             // TODO Auto-generated method stub  
  148.                             // 当用户点击 弹窗 触发:  
  149.                             // 开启 POI 检索、 开启 路径规矩, 跳转界面!  
  150.   
  151.                             // 1 隐藏 弹窗!  
  152.                             baiduMap.hideInfoWindow();  
  153.                         }  
  154.                     });  
  155.   
  156.                     // 2 show infoWindow  
  157.                     baiduMap.showInfoWindow(infoWindow);  
  158.   
  159.                     return false;  
  160.                       
  161.                 }  
  162.             });  
  163.         }  
  164.           
  165.   
  166.     /**  
  167.      *  // 3 获取 兴趣点:  
  168.      *  点击 本地的 图标的时候 开始 所搜数据。  
  169.      *  TODO 1 把兴趣点 显示在地图上  
  170.      *  TODO 2 点击一个兴趣点 弹窗显示 该点的名字!  
  171.      */  
  172.     private void getPoiResourse() {  
  173. //      设置poi检索监听者  
  174.         poiSearch.setOnGetPoiSearchResultListener(  
  175.                 new OnGetPoiSearchResultListener() {  
  176.                     @Override  
  177.                     public void onGetPoiResult(PoiResult arg0) {  
  178.                         // TODO 获取到 兴趣结果数据时 触发  
  179.                         // bind to baidumap  
  180.                         // PoiOverlay poiOverlay = new PoiOverlay(baiduMap);  
  181.                         //显示所有的兴趣点结果:  
  182.                         MyPoiOvrely poiOverlay = new MyPoiOvrely(baiduMap);  
  183.                         //MyPoiOvrely 实现了 new OnMarkerClickListener() 所以点击覆盖物的时候 会触发事件!  
  184.                         baiduMap.setOnMarkerClickListener(poiOverlay);  
  185.   
  186.                         poiOverlay.setData(arg0);  
  187.                         poiOverlay.addToMap();  
  188.                         // 价格地图缩放至 可以显示 全部情趣店的级别!  
  189.                         poiOverlay.zoomToSpan();  
  190.                     }  
  191.   
  192.                     @Override  
  193.                     public void onGetPoiDetailResult(PoiDetailResult arg0) {  
  194.                         // TODO 但获取 兴趣  详情时 触发  
  195.                           
  196.                         String url = arg0.getDetailUrl();  
  197.                           
  198. //                      设置 webView 显示的客户端!  
  199.                         webView.getSettings().setJavaScriptEnabled(true);  
  200.                         webView.setScrollBarStyle(0);  
  201.                         WebSettings webSettings = webView.getSettings();  
  202.                         webSettings.setAllowFileAccess(true);  
  203.                         webSettings.setBuiltInZoomControls(true);  
  204.                         webView.setWebViewClient(new WebViewClient(){  
  205.                             @Override  
  206.                             public boolean shouldOverrideUrlLoading(  
  207.                                     WebView view, String url) {  
  208.                                 // TODO Auto-generated method stub  
  209.                                 return false;  
  210.                             }  
  211.                         });  
  212.                         //加载数据  
  213.                         webView.loadUrl(url);  
  214.                     }  
  215.                 });  
  216.     }  
  217.   
  218.       
  219. //  自定义 PoiOverlay:  
  220.     class MyPoiOvrely extends PoiOverlay {  
  221.   
  222.         public MyPoiOvrely(BaiduMap arg0) {  
  223.             super(arg0);  
  224.             // TODO Auto-generated constructor stub  
  225.         }  
  226.   
  227. //      1 需要 点击事件:兴趣点的位置 索引!  
  228.         @Override  
  229.         public boolean onPoiClick(int index) {  
  230.             // TODO Auto-generated method stub  
  231. //           获取当前 覆盖层的Poi结果对象PoiResult.   
  232.             PoiResult result =  getPoiResult();  
  233.               
  234. //          在获取 PoiResult 中的List《poiInfo》 集合数据!  
  235.             List<PoiInfo> lists =result.getAllPoi();  
  236.               
  237. //          根据索引 获取 集合中的 数据信息! 兴趣点对象数据对象。  
  238.             final PoiInfo info = lists.get(index);  
  239.   
  240. //          弹出弹窗 弹窗中 内容: poiinfo name!  
  241.             baiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {  
  242.   
  243.                 @Override  
  244.                 public boolean onMarkerClick(Marker marker) {  
  245.                     // TODO Auto-generated method stub  
  246. //                  点击获取 显示详细信息!  
  247.                     getPoiInfo(info);  
  248.   
  249.                     return false;  
  250.                 }  
  251.   
  252.                 /**  
  253.                  * 点击获取 显示详细信息!  
  254.                  * @param info  
  255.                  * @param marker  
  256.                  */  
  257.                 private void getPoiInfo(final PoiInfo info) {  
  258.                       
  259.                     // 设置弹窗 (View arg0, LatLng arg1, int arg2) y 偏移量 ,  
  260.                     Button btn = new Button(getApplicationContext());  
  261.                       
  262.                     btn.setBackgroundColor(Color.GREEN);  
  263.                     btn.setText(info.name);  
  264.                     // btn 变成 View 图片  
  265.                     BitmapDescriptor descriptor = BitmapDescriptorFactory  
  266.                             .fromView(btn);  
  267.   
  268.                     /**  
  269.                      * 弹窗的点击事件:  
  270.                      *   
  271.                      * bd - InfoWindow 展示的bitmap position - InfoWindow 显示的地理位置  
  272.                      * yOffset - InfoWindow Y 轴偏移量 listener - InfoWindow 点击监听者  
  273.                      *   
  274.                      * */  
  275.                     InfoWindow infoWindow = new InfoWindow(  
  276.                             descriptor,   
  277.                             info.location,   
  278.                             -60,  
  279.                             new OnInfoWindowClickListener() {  
  280.                                   
  281.                                 public void onInfoWindowClick() {  
  282.                                     //TODO 当用户点击 弹窗 触发:  
  283.                                     // 开启 POI 检索、 开启 路径规矩, 跳转界面!  
  284.                                     // 在弹窗监听器中  二次检索兴趣点的详情!  
  285.                                     //  开始搜索:   
  286.                                     poiSearch.searchPoiDetail(  
  287.                                             new PoiDetailSearchOption().poiUid(info.uid));  
  288.   
  289.                                     // 1 隐藏 弹窗!  
  290.                                     baiduMap.hideInfoWindow();  
  291.                                 }  
  292.                             });  
  293.   
  294.                     // 2 show infoWindow  
  295.                     baiduMap.showInfoWindow(infoWindow);  
  296.                 }  
  297.             });  
  298.               
  299.             return super.onPoiClick(index);  
  300.         }  
  301.     }  
  302.   
  303.       
  304.     @Override  
  305.     protected void onResume() {  
  306.         // TODO Auto-generated method stub  
  307.         super.onResume();  
  308.   
  309.         mapView.onResume();  
  310.     }  
  311.   
  312.     @Override  
  313.     protected void onPause() {  
  314.         // TODO Auto-generated method stub  
  315.         super.onPause();  
  316.   
  317.         mapView.onPause();  
  318.     }  
  319.   
  320.     @Override  
  321.     protected void onDestroy() {  
  322.         // TODO Auto-generated method stub  
  323.         super.onDestroy();  
  324.   
  325.         mapView.onDestroy();  
  326.     }  
  327.       
  328.     @Override  
  329.     public boolean onCreateOptionsMenu(Menu menu) {  
  330.         // Inflate the menu; this adds items to the action bar if it is present.  
  331.         getMenuInflater().inflate(R.menu.main, menu);  
  332.         return true;  
  333.     }  
  334.   
  335. }  

你可能感兴趣的:(android,搜索,百度地图)