效果图如下:

导入高德地图的搜索服务包到工程的libs目录中,并配置好权限与用户KEY。
权限如下:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_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.ACCESS_COARSE_LOCATION" />  

用户KEY配置如下:

<meta-data android:name="com.amap.api.v2.apikey"android:value="这里填你的KEY"/>  

创建activity_main.xml布局文件如下,因为要实现用户输入直接就显示数据,所以就没用到搜索按钮。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><EditText android:id="@+id/search_edit"android:layout_width="match_parent"android:layout_height="wrap_content"/><ListView android:id="@+id/search_list"android:layout_width="match_parent"android:layout_height="wrap_content"></ListView>
</LinearLayout>

创建address_item.xml布局文件如下,用于ListView中每一个Item布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="20dp" ><TextView android:id="@+id/item_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="标题"android:textSize="20sp"/><TextView android:id="@+id/item_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="内容"android:textColor="#FF4A4A4A"/>
</LinearLayout>  

创建AddressBean实体类,代码如下

   public class AddressBean {private double longitude;//经度private double latitude;//纬度private String title;//信息标题private String text;//信息内容public AddressBean(double lon, double lat, String title, String text){this.longitude = lon;this.latitude = lat;this.title = title;this.text = text;}public double getLongitude() {return longitude;}public double getLatitude() {return latitude;}public String getTitle() {return title;}public String getText(){return text;}
}

创建SearchAdapter数据适配器类,代码如下:

public class SearchAdapter extends BaseAdapter{private List<AddressBean> data;private LayoutInflater li;public SearchAdapter(Context context){li = LayoutInflater.from(context);}/*** 设置数据集* @param data*/public void setData(List<AddressBean> data){this.data = data;}@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder vh = null;if(convertView == null){vh = new ViewHolder();convertView = li.inflate(R.layout.address_item, null);vh.title = (TextView) convertView.findViewById(R.id.item_title);vh.text = (TextView) convertView.findViewById(R.id.item_text);convertView.setTag(vh);}else{vh = (ViewHolder) convertView.getTag();}vh.title.setText(data.get(position).getTitle());vh.text.setText(data.get(position).getText());return convertView;}private class ViewHolder{public TextView title;public TextView text;}
}

这里会提供方法setData()用于动态更新数据集。

创建InputTask类,封装PoiSearch的搜索服务,并与Adapter进行绑定。

public class InputTask implements OnPoiSearchListener {private static InputTask mInstance;private SearchAdapter mAdapter;private PoiSearch mSearch;private Context mContext;private InputTask(Context context, SearchAdapter adapter){this.mContext = context;this.mAdapter = adapter;}/*** 获取实例* @param context 上下文* @param adapter 数据适配器* @return*/public static InputTask getInstance(Context context, SearchAdapter adapter){if(mInstance == null){synchronized (InputTask.class) {if(mInstance == null){mInstance = new InputTask(context, adapter);}}}return mInstance;}/*** 设置数据适配器* @param adapter*/public void setAdapter(SearchAdapter adapter){this.mAdapter = adapter;}/*** POI搜索* @param key 关键字* @param city 城市*/public void onSearch(String key, String city){//POI搜索条件PoiSearch.Query query = new PoiSearch.Query(key, "", city);mSearch = new PoiSearch(mContext, query);//设置异步监听mSearch.setOnPoiSearchListener(this);//查询POI异步接口mSearch.searchPOIAsyn();}/*** 异步搜索回调*/@Overridepublic void onPoiSearched(PoiResult poiResult, int rCode) {if(rCode == 0 && poiResult != null){ArrayList<AddressBean> data = new ArrayList<AddressBean>();ArrayList<PoiItem> items = poiResult.getPois();for(PoiItem item : items){//获取经纬度对象LatLonPoint llp = item.getLatLonPoint();double lon = llp.getLongitude();double lat = llp.getLatitude();//获取标题String title = item.getTitle();//获取内容String text = item.getSnippet();data.add(new AddressBean(lon, lat, title, text));}mAdapter.setData(data);mAdapter.notifyDataSetChanged();}}
}  

使用PoiSearch.Query定义搜索条件,构造方法有三个参数分别是:搜索关键字、POI类别、城市(地区)。
其中多个关键字用“|”分割,POI类别可以为”“空字符串代表不区分类别,城市可以为”“空字符串代表检索所有城市。
在搜索到结果回调的时候使用notifyDataSetChanged()更新数据适配器,实现数据动态更新。

创建MainAty类,代码如下:

public class MainAty extends Activity implements TextWatcher, OnItemClickListener{private static final String TAG = "MainAty";private EditText edit;private ListView lv;private SearchAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView(){edit = (EditText) findViewById(R.id.search_edit);lv = (ListView) findViewById(R.id.search_list);edit.addTextChangedListener(this);mAdapter = new SearchAdapter(this);lv.setAdapter(mAdapter);}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {InputTask.getInstance(this, mAdapter).onSearch(s.toString(), "");}@Overridepublic void afterTextChanged(Editable s) {}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {//Item点击事件处理}
}  

实现TextWatcher,并重写onTextChanged方法监听输入框数据的变化,从而实现实时更新数据。

Android实现高德地图POI搜索相关推荐

  1. 高德地图POI搜索,附近地图搜索,类似附近的人搜索

    效果图: 首先导入道德地图的SDK,导入步骤不在这里介绍 2:包含头文件: [objc] view plaincopy #import <AMapSearchKit/AMapSearchAPI. ...

  2. 高德地图 poi 搜索

    <!doctype html> <html lang="zh-CN"><head><!-- 原始地址://webapi.amap.com/ ...

  3. python获取高德地图POI——关键字搜索

    本文主要内容是利用python获取高德地图上的感兴趣点(POIs). 高德开放平台:https://lbs.amap.com/ 下载POI分类编码和城市编码表 搜索POI相关文档:https://lb ...

  4. 计算机设计基于Android实现高德地图校内导航出行app【项目源码+简要论文说明】

    基于Android实现高德地图校内导航出行app项目演示 如今手机的发展非常迅速,手机越来越成为人们不可缺少的东西.手机从最初功能简单的功能机,发展到如今几乎无所不能的智能机,满足了人们的日常需求,手 ...

  5. 基于Android实现高德地图校内导航出行app项目演示【项目源码+简要论文说明】分享

    基于Android实现高德地图校内导航出行app项目演示 如今手机的发展非常迅速,手机越来越成为人们不可缺少的东西.手机从最初功能简单的功能机,发展到如今几乎无所不能的智能机,满足了人们的日常需求,手 ...

  6. android仿高德地图透明黑字,Android 仿高德地图可拉伸的BottomSheet

    原标题:Android 仿高德地图可拉伸的BottomSheet 2018安卓巴士开发者大会-上海站 你一直期待的安卓技术盛宴即将登场! 前言 最近项目中需要用到高德地图搜索结果后的结果展示的可拉伸控 ...

  7. Android实现高德地图轨迹回放

    Android实现高德地图轨迹回放 写在前面 准备 官方文档解读 创建应用: 地图api引入: 权限添加 效果展示 过程实现 地图初始化 定位 显示标记点 点平滑移动 添加呼吸点 写在结尾 写在前面 ...

  8. 实用工具|零代码实现高德地图POI数据下载

    1 工具获取方式 点击下面链接,即可获取地理坐标系转换工具 地理坐标系转换工具 2 工具介绍 高德地图POI数据下载工具(下文称该工具)是一款能够让用户在不写代码的前提下实现高德地图POI数据批量下载 ...

  9. Android的高德地图实现行政区域显示

    Android app中查看位置,当位置没有具体地址,而是一个区镇的时候,一直没想好怎么处理.知道仔细看了一遍高德地图的官方文档,看到有行政区域这个功能,我们可以通过DistrictSearch类来发 ...

最新文章

  1. 【jqgrid】疑难杂症及解决方法(随缘更新)
  2. 百度搜索中台的FaaS化建设和智能化建设
  3. vCenter连接esxi 5.0报“Datacenter.QueryConnectionInfo” 失败
  4. DEAP:使用生理信号进行情绪分析的数据库(二、实验设计与主观分析)
  5. python中的reduce() 函数
  6. Java中遍历数组使用foreach循环还是for循环?
  7. C和指针之函数递归实现把amount表示的值转换为单词形式written_amount(unsigned int amount,char *buffer)
  8. C语言实用算法系列之学生管理系统_对整个结构体操作_冒泡排序
  9. Spring: 事务传播机制
  10. 初识webservice 服务
  11. OSEK OS(OSEK 操作系统)
  12. COMSOL(1)寻找最小曲面
  13. 最坑爹的硬盘:希捷ST2000DM001
  14. c语言中printf输出,C语言中printf输出的总结
  15. 导数定义考法一网打尽
  16. MySQL相关语句使用注意点
  17. java骰子_Java实现的简单掷骰子游戏示例
  18. C++ string乱码可能解决方案
  19. 通用接口开放平台设计与实现——(2)功能架构
  20. 今日头条——面试案例

热门文章

  1. Centos 系统折腾
  2. 基于SpringBoot的网上电影票购买系统设计与实现
  3. IOS APP 公司主体变更的转让流程
  4. java模拟时钟课程设计_java课程设计-时钟图形模拟
  5. 验证码爬取并识别-云大urp教务系统大作战(1)
  6. 用dango框架搭建博客网站
  7. 蓝牙技术|蓝牙(BLE)低功耗你所不了解的特性
  8. 分裂的史莱姆(二进制)
  9. 【高德地图】iOS 开发汇总(一)
  10. [云上贵州2017]智慧交通预测挑战赛