zoukankan      html  css  js  c++  java
  • Android 百度地图 简单实现--- 美食搜索

    Android 百度地图 简单实现---  美食
    依赖包:

    加入 Android 百度依赖包:


    1  key:

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


    2 权限:
     <!-- baimap 权限 -->
        <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 代码:

    package com.example.loveyoulmap;
    
    import java.util.List;
    
    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.Button;
    import android.widget.Toast;
    
    import com.baidu.mapapi.SDKInitializer;
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
    import com.baidu.mapapi.map.BitmapDescriptor;
    import com.baidu.mapapi.map.BitmapDescriptorFactory;
    import com.baidu.mapapi.map.InfoWindow;
    import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
    import com.baidu.mapapi.map.MapView;
    import com.baidu.mapapi.map.Marker;
    import com.baidu.mapapi.map.MarkerOptions;
    import com.baidu.mapapi.map.OverlayOptions;
    import com.baidu.mapapi.model.LatLng;
    import com.baidu.mapapi.overlayutil.PoiOverlay;
    import com.baidu.mapapi.search.core.PoiInfo;
    import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
    import com.baidu.mapapi.search.poi.PoiCitySearchOption;
    import com.baidu.mapapi.search.poi.PoiDetailResult;
    import com.baidu.mapapi.search.poi.PoiDetailSearchOption;
    import com.baidu.mapapi.search.poi.PoiResult;
    import com.baidu.mapapi.search.poi.PoiSearch;
    
    public class MainActivity extends Activity {
    
    //	MapView
    	private MapView mapView;
    //	百度地图   MapView.getMap();
    	private BaiduMap baiduMap;
    //	Poi  搜索
    	private PoiSearch poiSearch;
    //  webView 显示详情
    	private WebView webView;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		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(); } /** * //TODO 1 创建当前位置的标志 */ private void setOnePointToMap() { // 2 描写叙述其 BitmapDescriptor descriptor = BitmapDescriptorFactory .fromResource(R.drawable.ic_launcher); // 3 位置 纬经度 // 116.396364,39.916097 LatLng latLng = new LatLng(39.916097, 116.396364); // 1 覆盖一层 透视的 图层!

    OverlayOptions overlayOptions = new MarkerOptions().title("北京站") .icon(descriptor).position(latLng); // 向地图加入一个 Overlay baiduMap.addOverlay(overlayOptions); } /** * //TODO 2 设置 当前位置的 点击事件 弹出视图。 */ private void setPointListener() { // baiduMap 的 覆盖物 被点击。 触发该 事件。

    baiduMap.setOnMarkerClickListener(new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { // TODO 开启检索: 实在 点击之后触发的事件。 所搜方式: 城市内搜索! poiSearch.searchInCity(new PoiCitySearchOption().keyword("美食") .city("北京").pageNum(0).pageCapacity(10)); Button btn = new Button(getApplicationContext()); btn.setBackgroundColor(Color.RED); btn.setText(marker.getTitle()); // btn 变成 View 图片 BitmapDescriptor descriptor = BitmapDescriptorFactory .fromView(btn); /** * 弹窗的点击事件: * - InfoWindow 展示的bitmap position * - InfoWindow 显示的地理位置 * - InfoWindow Y 轴偏移量 listener * - InfoWindow 点击监听者 * InfoWindow 点击的时候 消失。 * */ InfoWindow infoWindow = new InfoWindow(descriptor, marker .getPosition(), -60, new OnInfoWindowClickListener() { public void onInfoWindowClick() { // TODO Auto-generated method stub // 当用户点击 弹窗 触发: // 开启 POI 检索、 开启 路径规矩, 跳转界面。 // 1 隐藏 弹窗。 baiduMap.hideInfoWindow(); } }); // 2 show infoWindow baiduMap.showInfoWindow(infoWindow); return false; } }); } /** * // 3 获取 兴趣点: * 点击 本地的 图标的时候 開始 所搜数据。

    * TODO 1 把兴趣点 显示在地图上 *  TODO 2 点击一个兴趣点 弹窗显示 该点的名字! */ private void getPoiResourse() { // 设置poi检索监听者 poiSearch.setOnGetPoiSearchResultListener( new OnGetPoiSearchResultListener() { @Override public void onGetPoiResult(PoiResult arg0) { // TODO 获取到 兴趣结果数据时 触发 // bind to baidumap // PoiOverlay poiOverlay = new PoiOverlay(baiduMap); //显示所有的兴趣点结果: MyPoiOvrely poiOverlay = new MyPoiOvrely(baiduMap); //MyPoiOvrely 实现了 new OnMarkerClickListener() 所以点击覆盖物的时候 会触发事件!

    baiduMap.setOnMarkerClickListener(poiOverlay); poiOverlay.setData(arg0); poiOverlay.addToMap(); // 价格地图缩放至 能够显示 所有情趣店的级别!

    poiOverlay.zoomToSpan(); } @Override public void onGetPoiDetailResult(PoiDetailResult arg0) { // TODO 但获取 兴趣 详情时 触发 String url = arg0.getDetailUrl(); // 设置 webView 显示的client! webView.getSettings().setJavaScriptEnabled(true); webView.setScrollBarStyle(0); WebSettings webSettings = webView.getSettings(); webSettings.setAllowFileAccess(true); webSettings.setBuiltInZoomControls(true); webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading( WebView view, String url) { // TODO Auto-generated method stub return false; } }); //载入数据 webView.loadUrl(url); } }); } // 自己定义 PoiOverlay: class MyPoiOvrely extends PoiOverlay { public MyPoiOvrely(BaiduMap arg0) { super(arg0); // TODO Auto-generated constructor stub } // 1 须要 点击事件:兴趣点的位置 索引! @Override public boolean onPoiClick(int index) { // TODO Auto-generated method stub // 获取当前 覆盖层的Poi结果对象PoiResult. PoiResult result = getPoiResult(); // 在获取 PoiResult 中的List《poiInfo》 集合数据!

    List<PoiInfo> lists =result.getAllPoi(); // 依据索引 获取 集合中的 数据信息! 兴趣点对象数据对象。 final PoiInfo info = lists.get(index); // 弹出弹窗 弹窗中 内容: poiinfo name! baiduMap.setOnMarkerClickListener(new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { // TODO Auto-generated method stub // 点击获取 显示具体信息。 getPoiInfo(info); return false; } /** * 点击获取 显示具体信息。 * @param info * @param marker */ private void getPoiInfo(final PoiInfo info) { // 设置弹窗 (View arg0, LatLng arg1, int arg2) y 偏移量 , Button btn = new Button(getApplicationContext()); btn.setBackgroundColor(Color.GREEN); btn.setText(info.name); // btn 变成 View 图片 BitmapDescriptor descriptor = BitmapDescriptorFactory .fromView(btn); /** * 弹窗的点击事件: * * bd - InfoWindow 展示的bitmap position - InfoWindow 显示的地理位置 * yOffset - InfoWindow Y 轴偏移量 listener - InfoWindow 点击监听者 * * */ InfoWindow infoWindow = new InfoWindow( descriptor, info.location, -60, new OnInfoWindowClickListener() { public void onInfoWindowClick() { //TODO 当用户点击 弹窗 触发: // 开启 POI 检索、 开启 路径规矩, 跳转界面! // 在弹窗监听器中 二次检索兴趣点的详情!

    // 開始搜索: poiSearch.searchPoiDetail( new PoiDetailSearchOption().poiUid(info.uid)); // 1 隐藏 弹窗!

    baiduMap.hideInfoWindow(); } }); // 2 show infoWindow baiduMap.showInfoWindow(infoWindow); } }); return super.onPoiClick(index); } } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); mapView.onResume(); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); mapView.onPause(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); mapView.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }





  • 相关阅读:
    python环境搭建以及jupyter notebook的安装和启动
    Python base(三)
    Python base(二)
    Python base(一)
    python之装饰器
    python 内置函数 (二)
    函数的简单写法
    python中set的用法
    python在终端运行时增加一些效果
    序列化写到类里
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7248396.html
Copyright © 2011-2022 走看看