因为项目需要,最近研究了下百度地图的SDK,简单记录一些点。

准备工作

1.下载SDK及demo

2.申请key

key需要用到app的包名和签名证书的SHA1值

如果需要使用 周边雷达 功能,需要再注册一个,否则无法使用

测试代码

周边雷达-Radar相关

import android.content.Context;

import android.os.Handler;

import android.util.Log;

import com.baidu.location.BDLocation;

import com.baidu.location.BDLocationListener;

import com.baidu.location.LocationClient;

import com.baidu.location.LocationClientOption;

import com.baidu.mapapi.model.LatLng;

import com.baidu.mapapi.radar.RadarNearbyInfo;

import com.baidu.mapapi.radar.RadarNearbyResult;

import com.baidu.mapapi.radar.RadarNearbySearchOption;

import com.baidu.mapapi.radar.RadarSearchError;

import com.baidu.mapapi.radar.RadarSearchListener;

import com.baidu.mapapi.radar.RadarSearchManager;

import com.baidu.mapapi.radar.RadarUploadInfo;

public class BDRadarTest {

private static final String TAG = BDRadarTest.class.getSimpleName();

private static RadarSearchManager mRSManager = null;

private static LocationClient mLocClient = null;

private static LatLng mLatLng = null;

private static Handler mHandler = null;

private static Context mContext = null;

public static void init(Context context) {

mContext = context;

mHandler = new Handler() {

@Override

public void handleMessage(android.os.Message msg) {

switch (msg.what) {

case 0:

goStartRadar();

break;

case 1:

goGetLocation();

break;

case 2:

goUploadInfo(mLatLng);

break;

case 3:

goRadar(mLatLng);

break;

case 4:

goClear();

break;

case 5:

goDestory();

break;

default:

break;

}

}

};

}

private static RadarSearchListener mRSListener = new RadarSearchListener() {

@Override

public void onGetUploadState(RadarSearchError err) {

Log.i(TAG, "UploadState");

if (err == RadarSearchError.RADAR_NO_ERROR) {

Log.i(TAG, "UploadState OK");

mHandler.sendEmptyMessage(3);

} else {

Log.i(TAG, "UploadState err:" + err);

mHandler.sendEmptyMessage(4);

}

}

@Override

public void onGetNearbyInfoList(RadarNearbyResult result,

RadarSearchError err) {

Log.i(TAG, "NearbyInfoList");

if (err == RadarSearchError.RADAR_NO_ERROR) {

Log.i(TAG, "NearbyInfoList OK");

//totalNum:3

//pageIndex:0

//pageNum:1

//infoList.size:3

//info userid:123

//info distance:814

//info comments:1

//info timeStamp:Mon Feb 15 18:24:49 格林尼治标准时间+0800 2016

Log.i(TAG, "totalNum:" + result.totalNum);// 总结果个数

Log.i(TAG, "pageIndex:" + result.pageIndex);// 页码

Log.i(TAG, "pageNum:" + result.pageNum);// 总页数

Log.i(TAG, "infoList.size:" + result.infoList.size());

for (int i = 0; i < result.infoList.size(); i++) {

RadarNearbyInfo info = result.infoList.get(i);

Log.i(TAG, "info userid:" + info.userID);// userid

Log.i(TAG, "info distance:" + info.distance);// 距离

Log.i(TAG, "info comments:" + info.comments);// 备注

Log.i(TAG, "info timeStamp:" + info.timeStamp);// 上传位置时的时间戳

}

} else {

Log.i(TAG, "NearbyInfoList err:" + err);

}

mHandler.sendEmptyMessage(4);

}

@Override

public void onGetClearInfoState(RadarSearchError err) {

Log.i(TAG, "ClearInfoState");

if (err == RadarSearchError.RADAR_NO_ERROR) {

Log.i(TAG, "ClearInfoState OK");

} else {

Log.i(TAG, "ClearInfoState err:" + err);

}

mHandler.sendEmptyMessage(5);

}

};

public static void startRadar() {

Log.i(TAG, "startRadar");

mHandler.sendEmptyMessage(0);

}

private static void goStartRadar() {

Log.i(TAG, "goStartRadar");

// 获取本地位置--上传位置信息--等待回调--回调成功--开始查询--等待回调--回调中打印结果

mRSManager = RadarSearchManager.getInstance();

mRSManager.setUserID("test01");

mRSManager.addNearbyInfoListener(mRSListener);

// 定位

mHandler.sendEmptyMessage(1);

}

private static void goGetLocation() {

Log.i(TAG, "goGetLocation");

LocationClientOption locOption = new LocationClientOption();

locOption.setIgnoreKillProcess(false);

locOption.setEnableSimulateGps(true);

locOption.setCoorType("bd09ll");

mLocClient = new LocationClient(mContext);

mLocClient.setLocOption(locOption);

mLocClient.registerLocationListener(new BDLocationListener() {

@Override

public void onReceiveLocation(BDLocation location) {

Log.i(TAG, "onReceiveLocation");

mLatLng = new LatLng(location.getLatitude(),

location.getLongitude());

mHandler.sendEmptyMessage(2);

// 定位成功后销毁

mLocClient.stop();

}

});

mLocClient.start();

}

private static void goUploadInfo(LatLng ll) {

Log.i(TAG, "goUploadInfo");

RadarUploadInfo info = new RadarUploadInfo();

info.comments = "m";

info.pt = ll;

mRSManager.uploadInfoRequest(info);

}

private static void goRadar(LatLng ll) {

Log.i(TAG, "goRadar");

RadarNearbySearchOption option = new RadarNearbySearchOption();

option.centerPt(ll);// 中心点

option.pageCapacity(10);// 每页包含的结果数

option.pageNum(0);// 当前需要查询的页码index,从0开始

option.radius(1000);// 搜索半径

mRSManager.nearbyInfoRequest(option);

}

private static void goClear() {

Log.i(TAG, "goClear");

mRSManager.clearUserInfo();

}

private static void goDestory() {

Log.i(TAG, "goDestory");

mRSManager.removeNearbyInfoListener(mRSListener);

mRSManager.destroy();

}

}

调用代码:

// 初始化SDK

SDKInitializer.initialize(getApplicationContext());

// 初始化handler

BDRadarTest.init(context);

// 开始

BDRadarTest.startRadar();

周边搜索-PoiSearch相关

import android.content.Context;

import android.os.Handler;

import android.util.Log;

import com.baidu.location.BDLocation;

import com.baidu.location.BDLocationListener;

import com.baidu.location.LocationClient;

import com.baidu.location.LocationClientOption;

import com.baidu.mapapi.model.LatLng;

import com.baidu.mapapi.search.core.PoiInfo;

import com.baidu.mapapi.search.core.SearchResult.ERRORNO;

import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;

import com.baidu.mapapi.search.poi.PoiDetailResult;

import com.baidu.mapapi.search.poi.PoiNearbySearchOption;

import com.baidu.mapapi.search.poi.PoiResult;

import com.baidu.mapapi.search.poi.PoiSearch;

import com.baidu.mapapi.search.poi.PoiSortType;

public class BDPoiTest {

private static final String TAG = BDPoiTest.class.getSimpleName();

private static PoiSearch mPoiSManager = null;

private static LocationClient mLocClient = null;

private static LatLng mLatLng = null;

private static Handler mHandler = null;

private static Context mContext = null;

public static void init(Context context) {

mContext = context;

mHandler = new Handler() {

@Override

public void handleMessage(android.os.Message msg) {

switch (msg.what) {

case 0:

goStartPoi();

break;

case 1:

goGetLocation();

break;

case 2:

goPoiSearch(mLatLng);

break;

case 3:

goDestory();

break;

default:

break;

}

}

};

}

private static OnGetPoiSearchResultListener mPoiResultListener = new OnGetPoiSearchResultListener() {

@Override

public void onGetPoiResult(PoiResult result) {

if (result.error == ERRORNO.NO_ERROR) {

Log.i(TAG, "GetPoiResult OK");

//totalNum:45

//totalPageNum:5

//pageIndex:0

//pageCapacity:10

//isHasAddrInfo:false

//poi.size:10

//info address:北京市东城区王府井大街277号(近好友世界商场)

//info city:北京市

//info name:酷时代游艺世界

//info phoneNum:(010)65225696

//info postCode:null

//info uid:34059f97e013925471455bce

//info hasCaterDetails:false

//info isPano:true

//info location:latitude: 39.91824597245212, longitude: 116.41649542740966

//info type:POINT

Log.i(TAG, "totalNum:" + result.getTotalPoiNum());// 总结果个数

Log.i(TAG, "totalPageNum:" + result.getTotalPageNum());// 总页数

Log.i(TAG, "pageIndex:" + result.getCurrentPageNum());// 页码

Log.i(TAG, "pageCapacity:" + result.getCurrentPageCapacity());// 本页的结果数,可能小于本页可显示的结果数

Log.i(TAG, "isHasAddrInfo:" + result.isHasAddrInfo());

Log.i(TAG, "poi.size:" + result.getAllPoi().size());

if (result.isHasAddrInfo()) {// 如果为false,则getAllAddr为空

Log.i(TAG, "addr.size:" + result.getAllAddr().size());

}

for (int i = 0; i < result.getAllPoi().size(); i++) {

PoiInfo info = result.getAllPoi().get(i);

Log.i(TAG, "info address:" + info.address);// 地址

Log.i(TAG, "info city:" + info.city);// 城市

Log.i(TAG, "info name:" + info.name);// 名称

Log.i(TAG, "info phoneNum:" + info.phoneNum);// 电话

Log.i(TAG, "info postCode:" + info.postCode);// 邮编

Log.i(TAG, "info uid:" + info.uid);// uid,用于后面查询DetailResult

Log.i(TAG, "info hasCaterDetails:" + info.hasCaterDetails);// 是否有详细信息

Log.i(TAG, "info isPano:" + info.isPano);// 是否有全景

Log.i(TAG, "info location:" + info.location);// 经纬度

Log.i(TAG, "info type:" + info.type);// 类型

}

} else {

Log.i(TAG, "GetPoiResult err:" + result.error);

}

mHandler.sendEmptyMessage(3);

}

@Override

public void onGetPoiDetailResult(PoiDetailResult result) {

mHandler.sendEmptyMessage(3);

}

};

public static void startPoi() {

Log.i(TAG, "startPoi");

mHandler.sendEmptyMessage(0);

}

private static void goStartPoi() {

Log.i(TAG, "goStartPoi");

// 获取本地位置--上传位置信息--等待回调--回调成功--开始查询--等待回调--回调中打印结果

mPoiSManager = PoiSearch.newInstance();

mPoiSManager.setOnGetPoiSearchResultListener(mPoiResultListener);

// 定位

mHandler.sendEmptyMessage(1);

}

private static void goGetLocation() {

Log.i(TAG, "goGetLocation");

LocationClientOption locOption = new LocationClientOption();

locOption.setIgnoreKillProcess(false);

locOption.setEnableSimulateGps(true);

locOption.setCoorType("bd09ll");

mLocClient = new LocationClient(mContext);

mLocClient.setLocOption(locOption);

mLocClient.registerLocationListener(new BDLocationListener() {

@Override

public void onReceiveLocation(BDLocation location) {

Log.i(TAG, "onReceiveLocation");

mLatLng = new LatLng(location.getLatitude(),

location.getLongitude());

mHandler.sendEmptyMessage(2);

// 定位成功后销毁

mLocClient.stop();

}

});

mLocClient.start();

}

private static void goPoiSearch(LatLng ll) {

Log.i(TAG, "goPoiSearch");

PoiNearbySearchOption option = new PoiNearbySearchOption();

option.location(ll);

option.radius(3000);

option.sortType(PoiSortType.distance_from_near_to_far);

option.keyword("棋牌室");

option.pageCapacity(10);// 每页最多含多少条结果

option.pageNum(0);// 查询的页码

mPoiSManager.searchNearby(option);

}

private static void goDestory() {

Log.i(TAG, "goDestory");

mPoiSManager.destroy();

}

}

调用方式与之前相似。

注意!这里有坑

所有流程都在主线程或handler里做,否则可能会报错

上传信息时,用户名和备注有限制,具体限制未知,如果上传失败,可以尝试修改

Option的pageNum指的是要查询的page的index,从0开始

周边雷达,需要上传位置信息后,才能被搜索到

周边雷达的位置信息会一直保留,除非自己主动clear

poi搜索结果中,如果isHasAddrInfo为false,那么getAllAddr将是一个null

android 百度周边雷达,android 百度地图SDK 3.7.0 周边雷达-Radar 周边搜索-PoiSearch相关推荐

  1. Android第三方开发包之高德地图SDK使用介绍

    Android第三方开发包之高德地图SDK使用介绍 前言 准备 Android Studio 配置工程 1,新建一个 Empty Activity 应用项目. 2,添加SDK 3,集成SDK 显示地图 ...

  2. android 百度地图SDK 3.7.0 周边雷达-Radar 周边搜索-PoiSearch

    因为项目需要,最近研究了下百度地图的SDK,简单记录一些点. 准备工作 1.下载SDK及demo 下载地址:http://lbsyun.baidu.com/index.php?title=androi ...

  3. Android百度地图——SDK版本v2.0.0初探

    大过年的,没回家.听着外面烟花爆竹声阵阵,大冷天的一个人也不想出去转.城市不管多么繁华,一个人都是感觉"无味".最近在研究百度地图的API使用,在使用过程中遇到些问题,有些心得吧, ...

  4. Android第三方开发包值高德地图SDK使用介绍

    (1)配置Project的build.gradle:添加jcenter的仓库地址 文件位置: 代码: allprojects { repositories { jcenter() // 或者 mave ...

  5. Android第三方开发包值高德地图SDK使用介绍,android面试基础

    jcenter() // 或者 mavenCentral() } } (2)配置主工程文件的build.gradle文件 文件位置: 代码: android { defaultConfig { ndk ...

  6. android6.0 百度地图,Android百度地图SDK 导航SDK2.0结合定位SDK6.0.5的导航参数设置方法...

    是否执行成功 其中对于算路的节点,现在有了一个新的规则,可见BNRoutePlanNode 取文档的释义如下: public BNRoutePlanNode(double longitude, dou ...

  7. Android --- 百度地图 SDK v3.6.0 以上版本找不到 PoiOverlay 类

    解决方法: 下载下面的包,解压 链接:https://pan.baidu.com/s/1Wux0Y8-ZygYL5v0gRanVqw 提取码:ccxx 将下面的文件放到你的项目中

  8. 百度地图SDK v3.6.0以上版本找不到PoiOverlay类的解决方法

    最近测试本人使用的是百度地图用SDK v3.7.3的版本,使用POI检索功能的时候,想直接使用PoiOverlay类创建对象把检索出来的结果在地图上表示出来.按照正常的方法如下: 可是无论如何也没有也 ...

  9. 百度地图SDK v3.6.0以上版本setOnMarkerClickListener 失效的问题解决

    不多说上代码 原本是这样的 我测试的版本是 百度的 3.7.3版本. 再次使用上面代码 失效了. 后来论坛各种找,没有结果.再后来 去看百度的源码.发现 由于这个 百度OverLay这个类开源了.所以 ...

最新文章

  1. c语言答案填空选择,C语言试题配答案
  2. python中scrapy框架_python的scrapy框架
  3. bzoj 4010 菜肴制作
  4. SAP Commerce的Content Page,Content Slot和Component在Spartacus里的应用
  5. PTA 数据结构与算法题目集(中文)
  6. 基于Maven的spring_security入门
  7. PersonGraphDataSet近十万的开放人物关系图谱项目
  8. Qt中设置窗体固定大小的方法
  9. Facebook 又搞事,违反竞业协议被起诉,PyTorch 关键技术疑侵权
  10. influxdb 统计 每天 指定时间段_抖音短视频什么时间段发布?容易上热门!
  11. 分享一段php获取随意时间的前一天代码
  12. paip.图片文件上传功能总结
  13. 三步完美完成wordpress外链跳转
  14. 解决2345劫持主页的办法--火绒2345专杀
  15. m2增长率曲线_中国通胀率(中国m2历年数据曲线图)
  16. 软件工程——团队作业4
  17. Visual Studio Code,一款功能强大且轻巧的免费代码集成编辑器介绍
  18. 游戏建模行业就国内发展的前景,以及行业变化是如何的?
  19. 【亲测可用】云之道知识付费v2独立版3.0.1全开源+前后端源码
  20. 人工智能?AI?都是什么 四句话就让你彻底明白

热门文章

  1. 壹拾玖:DS18B20的温度读取
  2. Java职业发展和成长路径
  3. 【数据分析师_01_学前】002_数据分析师职业发展路径
  4. 平心静气,从零开始,急于求成最不可取。
  5. linux 查看snmp端口,linux下的snmp配置及获取信息测试
  6. Java工具类pdfbox将多个pdf合并成一个pdf。
  7. 【宝物志】门店运营内容分享 第二十四期
  8. TiDB Lightning 简介
  9. 大数据催生智慧园区_基于人工智能的智慧园区异构设备统一接入方法与流程
  10. 全屏背景半透明对话框用PhotoView显示图片放大缩小图片