Android 百度地图 简单实现--- 美食搜索
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value=" 申请的Key" />
<!-- 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;
} }
Android 百度地图 简单实现--- 美食搜索的更多相关文章
- Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...
- Android百度地图相关内容汇总
Android百度地图知识讲解 1.百度地图开发环境搭建 http://www.apkbus.com/android-116050-1-1.html 2.Android百度地图系列教程 h ...
- [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
近期做android百度地图,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--仅仅显示网格而没有显示地图,网 ...
- Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直认为地图应用支持离线地图非常重要啊.我等移动2G屌丝,流量不易 ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android 百度地图API(01)_开发环境 HelloBaiduMap
转载于:http://blog.csdn.net/lmj623565791/article/details/37729091 转载于:http://blog.csdn.net/crazy1235/ar ...
- Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- iOS百度地图简单使用详解
iOS百度地图简单使用详解 百度地图 iOS SDK是一套基于iOS 5.0及以上版本设备的应用程序接口,不仅提供展示地图的基本接口,还提供POI检索.路径规划.地图标注.离线地图.定位.周边雷达等丰 ...
随机推荐
- javaScript构造函数、原型、面向对象编程
js最重要也是最核心的东西就是对象了,入行这么长时间,一直对面向对象一知半解.网上有很多介绍对象对象的内容,这里也做了很多借鉴, 尤其是阮一峰老师的文章.我这里写的大多例子都是阮一峰老师文章的例子,但 ...
- es6+最佳入门实践(2)
2.解构赋值 2.1.什么是解构赋值? 什么是解构赋值?这里的关键字还是赋值,这是说如何去赋值的问题,这里说的解构可以理解为解散重新构造,所以解构赋值可以理解为解散重新构造后进行赋值,通常是左边一种结 ...
- 动态加载.so文件并执行类函数
背景:不同产品组将其功能编译为.so,这些.so 可以加载到统一的基础平台上运行,如果产品组代码有改动,只需要更新对应的.so 问题:如何动态加载.so文件,并使用里边的函数/类 ? 解决方法1: 使 ...
- 非常好!!!Linux源代码阅读——内核引导【转】
Linux源代码阅读——内核引导 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 目录 Linux 引导过程综述 BI ...
- javascript简单拖拽(鼠标事件 mousedown mousemove mouseup)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- jquery_EasyUI使用细节注意
一.属性key不加双引号,value加双引号,对于url的value,添加‘’单引号:url的访问地址可以使用以下格式: datagrid中的url格式: var datagrid; $(functi ...
- List的set和add方法
问题描述:[相机]打开记录拍摄地理位置后拍照详情中少“宽度”属性; 原因分析:在listview动态刷新时用set(index,elemet)方法替换了宽度及其值: 解决方法:改为add(index, ...
- SpringMvc+Spring+Mybatis+Maven整合
一.建立数据库表,使用generator自动生成相关代码: /* SQLyog Ultimate v11.24 (32 bit) MySQL - 5.1.62-community : Database ...
- .apache.commons.io 源代码学习(一)
java的初学者,准备通读各种高水平源代码,提升能力. 为了避免自己的惰性,写博客. 版本:2.5 开发平台:netbeans. 今天是第一天,网上先看个例子:http://www.importnew ...
- poj2976(01分数规划)
poj2976 题意 给出 a b 数组,一共 n 对数,其中最多可以去掉 k 对,问怎样使剩下比率(原始比率是 $ \frac{\sum_{i=1}^{n} a}{\sum_{i=1}^{n} b} ...