Android 百度地图 简单实现--- 美食搜索
16lz
2021-01-23
依赖包:
添加 Android 百度依赖包:
1 key:
<!-- 开发者 key -->
2 权限:
3 代码:
添加 Android 百度依赖包:
1 key:
<!-- 开发者 key -->
- <meta-data
- android:name="com.baidu.lbsapi.API_KEY"
- android:value="申请的Key"/>
2 权限:
- <!--baimap权限-->
- <uses-permissionandroid:name="android.permission.GET_ACCOUNTS"/>
- <uses-permissionandroid:name="android.permission.USE_CREDENTIALS"/>
- <uses-permissionandroid:name="android.permission.MANAGE_ACCOUNTS"/>
- <uses-permissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
- <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
- <uses-permissionandroid:name="android.permission.INTERNET"/>
- <uses-permissionandroid:name="com.android.launcher.permission.READ_SETTINGS"/>
- <uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>
- <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
- <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
- <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permissionandroid:name="android.permission.BROADCAST_STICKY"/>
- <uses-permissionandroid:name="android.permission.WRITE_SETTINGS"/>
- <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
3 代码:
- packagecom.example.loveyoulmap;
- importjava.util.List;
- importandroid.app.Activity;
- importandroid.graphics.Color;
- importandroid.os.Bundle;
- importandroid.util.Log;
- importandroid.view.Menu;
- importandroid.webkit.WebSettings;
- importandroid.webkit.WebView;
- importandroid.webkit.WebViewClient;
- importandroid.widget.Button;
- importandroid.widget.Toast;
- importcom.baidu.mapapi.SDKInitializer;
- importcom.baidu.mapapi.map.BaiduMap;
- importcom.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
- importcom.baidu.mapapi.map.BitmapDescriptor;
- importcom.baidu.mapapi.map.BitmapDescriptorFactory;
- importcom.baidu.mapapi.map.InfoWindow;
- importcom.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
- importcom.baidu.mapapi.map.MapView;
- importcom.baidu.mapapi.map.Marker;
- importcom.baidu.mapapi.map.MarkerOptions;
- importcom.baidu.mapapi.map.OverlayOptions;
- importcom.baidu.mapapi.model.LatLng;
- importcom.baidu.mapapi.overlayutil.PoiOverlay;
- importcom.baidu.mapapi.search.core.PoiInfo;
- importcom.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
- importcom.baidu.mapapi.search.poi.PoiCitySearchOption;
- importcom.baidu.mapapi.search.poi.PoiDetailResult;
- importcom.baidu.mapapi.search.poi.PoiDetailSearchOption;
- importcom.baidu.mapapi.search.poi.PoiResult;
- importcom.baidu.mapapi.search.poi.PoiSearch;
- publicclassMainActivityextendsActivity{
- //MapView
- privateMapViewmapView;
- //百度地图MapView.getMap();
- privateBaiduMapbaiduMap;
- //Poi搜索
- privatePoiSearchpoiSearch;
- //webView显示详情
- privateWebViewwebView;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- //去掉标题的显示(就是app最顶上的显示内容!)
- requestWindowFeature(1);
- //在使用SDK各组件之前初始化context信息,传入ApplicationContext
- //注意该方法要再setContentView方法之前实现
- SDKInitializer.initialize(getApplicationContext());
- setContentView(R.layout.activity_main);
- //获取MapView
- mapView=(MapView)this.findViewById(R.id.map);
- webView=(WebView)this.findViewById(R.id.webview);
- //初始化poiSearch对象!
- poiSearch=PoiSearch.newInstance();
- //获取地图视图:
- baiduMap=mapView.getMap();
- baiduMap.setTrafficEnabled(true);
- //
- baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
- baiduMap.setMaxAndMinZoomLevel(15,19);
- //1创建当前位置的标志
- setOnePointToMap();
- //2设置为点击事件:
- setPointListener();
- //3获取兴趣点:搜索服务!
- getPoiResourse();
- }
- /**
- *//TODO1创建当前位置的标志
- */
- privatevoidsetOnePointToMap(){
- //2描述其
- BitmapDescriptordescriptor=BitmapDescriptorFactory
- .fromResource(R.drawable.ic_launcher);
- //3位置纬经度
- //116.396364,39.916097
- LatLnglatLng=newLatLng(39.916097,116.396364);
- //1覆盖一层透视的图层!
- OverlayOptionsoverlayOptions=newMarkerOptions().title("北京站")
- .icon(descriptor).position(latLng);
- //向地图添加一个Overlay
- baiduMap.addOverlay(overlayOptions);
- }
- /**
- *//TODO2设置当前位置的点击事件弹出视图!
- */
- privatevoidsetPointListener(){
- //baiduMap的覆盖物被点击!触发该事件。
- baiduMap.setOnMarkerClickListener(newOnMarkerClickListener(){
- @Override
- publicbooleanonMarkerClick(Markermarker){
- //TODO开启检索:实在点击之后触发的事件。所搜方式:城市内搜索!
- poiSearch.searchInCity(newPoiCitySearchOption().keyword("美食")
- .city("北京").pageNum(0).pageCapacity(10));
- Buttonbtn=newButton(getApplicationContext());
- btn.setBackgroundColor(Color.RED);
- btn.setText(marker.getTitle());
- //btn变成View图片
- BitmapDescriptordescriptor=BitmapDescriptorFactory
- .fromView(btn);
- /**
- *弹窗的点击事件:
- *-InfoWindow展示的bitmapposition
- *-InfoWindow显示的地理位置
- *-InfoWindowY轴偏移量listener
- *-InfoWindow点击监听者
- *InfoWindow点击的时候消失。
- **/
- InfoWindowinfoWindow=newInfoWindow(descriptor,marker
- .getPosition(),-60,newOnInfoWindowClickListener(){
- publicvoidonInfoWindowClick(){
- //TODOAuto-generatedmethodstub
- //当用户点击弹窗触发:
- //开启POI检索、开启路径规矩,跳转界面!
- //1隐藏弹窗!
- baiduMap.hideInfoWindow();
- }
- });
- //2showinfoWindow
- baiduMap.showInfoWindow(infoWindow);
- returnfalse;
- }
- });
- }
- /**
- *//3获取兴趣点:
- *点击本地的图标的时候开始所搜数据。
- *TODO1把兴趣点显示在地图上
- * TODO2点击一个兴趣点弹窗显示该点的名字!
- */
- privatevoidgetPoiResourse(){
- //设置poi检索监听者
- poiSearch.setOnGetPoiSearchResultListener(
- newOnGetPoiSearchResultListener(){
- @Override
- publicvoidonGetPoiResult(PoiResultarg0){
- //TODO获取到兴趣结果数据时触发
- //bindtobaidumap
- //PoiOverlaypoiOverlay=newPoiOverlay(baiduMap);
- //显示所有的兴趣点结果:
- MyPoiOvrelypoiOverlay=newMyPoiOvrely(baiduMap);
- //MyPoiOvrely实现了newOnMarkerClickListener()所以点击覆盖物的时候会触发事件!
- baiduMap.setOnMarkerClickListener(poiOverlay);
- poiOverlay.setData(arg0);
- poiOverlay.addToMap();
- //价格地图缩放至可以显示全部情趣店的级别!
- poiOverlay.zoomToSpan();
- }
- @Override
- publicvoidonGetPoiDetailResult(PoiDetailResultarg0){
- //TODO但获取兴趣详情时触发
- Stringurl=arg0.getDetailUrl();
- //设置webView显示的客户端!
- webView.getSettings().setJavaScriptEnabled(true);
- webView.setScrollBarStyle(0);
- WebSettingswebSettings=webView.getSettings();
- webSettings.setAllowFileAccess(true);
- webSettings.setBuiltInZoomControls(true);
- webView.setWebViewClient(newWebViewClient(){
- @Override
- publicbooleanshouldOverrideUrlLoading(
- WebViewview,Stringurl){
- //TODOAuto-generatedmethodstub
- returnfalse;
- }
- });
- //加载数据
- webView.loadUrl(url);
- }
- });
- }
- //自定义PoiOverlay:
- classMyPoiOvrelyextendsPoiOverlay{
- publicMyPoiOvrely(BaiduMaparg0){
- super(arg0);
- //TODOAuto-generatedconstructorstub
- }
- //1需要点击事件:兴趣点的位置索引!
- @Override
- publicbooleanonPoiClick(intindex){
- //TODOAuto-generatedmethodstub
- //获取当前覆盖层的Poi结果对象PoiResult.
- PoiResultresult=getPoiResult();
- //在获取PoiResult中的List《poiInfo》集合数据!
- List<PoiInfo>lists=result.getAllPoi();
- //根据索引获取集合中的数据信息!兴趣点对象数据对象。
- finalPoiInfoinfo=lists.get(index);
- //弹出弹窗弹窗中内容:poiinfoname!
- baiduMap.setOnMarkerClickListener(newOnMarkerClickListener(){
- @Override
- publicbooleanonMarkerClick(Markermarker){
- //TODOAuto-generatedmethodstub
- //点击获取显示详细信息!
- getPoiInfo(info);
- returnfalse;
- }
- /**
- *点击获取显示详细信息!
- *@paraminfo
- *@parammarker
- */
- privatevoidgetPoiInfo(finalPoiInfoinfo){
- //设置弹窗(Viewarg0,LatLngarg1,intarg2)y偏移量,
- Buttonbtn=newButton(getApplicationContext());
- btn.setBackgroundColor(Color.GREEN);
- btn.setText(info.name);
- //btn变成View图片
- BitmapDescriptordescriptor=BitmapDescriptorFactory
- .fromView(btn);
- /**
- *弹窗的点击事件:
- *
- *bd-InfoWindow展示的bitmapposition-InfoWindow显示的地理位置
- *yOffset-InfoWindowY轴偏移量listener-InfoWindow点击监听者
- *
- **/
- InfoWindowinfoWindow=newInfoWindow(
- descriptor,
- info.location,
- -60,
- newOnInfoWindowClickListener(){
- publicvoidonInfoWindowClick(){
- //TODO当用户点击弹窗触发:
- //开启POI检索、开启路径规矩,跳转界面!
- //在弹窗监听器中二次检索兴趣点的详情!
- //开始搜索:
- poiSearch.searchPoiDetail(
- newPoiDetailSearchOption().poiUid(info.uid));
- //1隐藏弹窗!
- baiduMap.hideInfoWindow();
- }
- });
- //2showinfoWindow
- baiduMap.showInfoWindow(infoWindow);
- }
- });
- returnsuper.onPoiClick(index);
- }
- }
- @Override
- protectedvoidonResume(){
- //TODOAuto-generatedmethodstub
- super.onResume();
- mapView.onResume();
- }
- @Override
- protectedvoidonPause(){
- //TODOAuto-generatedmethodstub
- super.onPause();
- mapView.onPause();
- }
- @Override
- protectedvoidonDestroy(){
- //TODOAuto-generatedmethodstub
- super.onDestroy();
- mapView.onDestroy();
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
- getMenuInflater().inflate(R.menu.main,menu);
- returntrue;
- }
- }
更多相关文章
- Android 之 SQLite数据库的使用
- SQLite 数据库 WAL 工作模式原理简介
- android中的数据库操作(SQLite)
- Android菜鸟的成长笔记(11)——Android中的事件处理
- android 操作sqlite数据库
- Android事件处理
- Android之各种事件触发方案
- Android 利用TCP通信 实现环境数据显示及控制指令下发