深入学习百度地图Android SDK v4.0.0【第七关】周边雷达

来源:互联网 发布:上海惠保数据不发工资 编辑:程序博客网 时间:2024/05/22 03:38
 

深入学习百度地图Android SDK v4.0.0【第七关】周边雷达

标签: Android百度地图
 1283人阅读 评论(3) 收藏 举报
 分类:
 

目录(?)[+]

本来想学习一下Andriod Wear的开发,但是买不起Wear啊!直接跳过,开始学习周边雷达地图部分!这个功能非常有用,能知道你周围和你使用相同软件的人,牛郎织女一人安装一个,再也不用去鹊桥相会了,随时都能知道对方在哪里,可是怎么多出来那么多牛郎织女!

第一步【注册周边雷达】

要使用此功能,需要对你的想用周边雷达功能的App进行注册,相当于绑定,而且可以绑定多个!周边雷达注册


第二步【上传位置,检索周边】

上传有上传一次和自动时间间隔上传,检索可以查看周边使用此App的人,里面可以填入检索的页数,人数和范围!


第三步【清除用户数据】

最后如果不想再被查看,当然是可以清除你的位置信息的!


感觉很简单,其实各种坑等着你呢!看代码:

[java] view plain copy
  1. package cq.cake.chwl.ui;  
  2.   
  3. import android.os.Bundle;  
  4. import android.view.Menu;  
  5. import android.view.MenuItem;  
  6.   
  7. import com.baidu.mapapi.model.LatLng;  
  8. import com.baidu.mapapi.radar.RadarNearbyResult;  
  9. import com.baidu.mapapi.radar.RadarNearbySearchOption;  
  10. import com.baidu.mapapi.radar.RadarSearchError;  
  11. import com.baidu.mapapi.radar.RadarSearchListener;  
  12. import com.baidu.mapapi.radar.RadarSearchManager;  
  13. import com.baidu.mapapi.radar.RadarUploadInfo;  
  14. import com.baidu.mapapi.radar.RadarUploadInfoCallback;  
  15.   
  16. import cq.cake.base.BaseToolbarMapActivity;  
  17. import cq.cake.chwl.R;  
  18. import cq.cake.util.L;  
  19. import cq.cake.util.T;  
  20.   
  21. /** 
  22.  * 周边雷达功能 
  23.  * 查看周围都在使用此App的人群 
  24.  * 利用周边雷达功能,可实现周边(处于同一个周边雷达关系内)用户位置信息检索的能力。 
  25.  * 检索过程支持距离、时间等约束条件;返回结果支持按照距离、时间远近的排序。 
  26.  */  
  27. public class RabarActivity extends BaseToolbarMapActivity implements RadarSearchListener, RadarUploadInfoCallback {  
  28.     RadarSearchManager mManager;  
  29.     String userID = "100";  
  30.     LatLng pt = new LatLng(106.465712,29.562483);  
  31.     @Override  
  32.     protected void onCreate(Bundle savedInstanceState) {  
  33.         super.onCreate(savedInstanceState);  
  34.         setContentView(R.layout.activity_rabar);  
  35.         init();  
  36.   
  37.     }  
  38.   
  39.     private void init() {  
  40.         //周边雷达功能模块进行初始化  
  41.         mManager = RadarSearchManager.getInstance();  
  42.         //周边雷达设置监听  
  43.         mManager.addNearbyInfoListener(this);  
  44.         //周边雷达设置用户身份标识,id为空默认是设备标识  
  45.         mManager.setUserID(userID);  
  46.   
  47.     }  
  48.   
  49.   
  50.   
  51.     /** 
  52.      * 【1】上传我的位置 
  53.      * 实际应用中应该取定位到当前位置的经纬度 
  54.      * 重庆市渝中区沙坪坝师范大学:106.465712,29.562483 
  55.      */  
  56.     private boolean upMyAddr() {  
  57.   
  58.         //上传位置  
  59. //        LatLng pt = new LatLng(106.466343, 29.563757);  
  60.         RadarUploadInfo info = new RadarUploadInfo();  
  61.         info.comments = "SmallCake";  
  62.         info.pt = pt;  
  63.         return mManager.uploadInfoRequest(info);  
  64.     }  
  65.     /** 
  66.      * 【2】自动上传我的位置 
  67.      */  
  68.     private void autoUpMyAddr() {  
  69.         //设置自动上传的callback和时间间隔  
  70.         mManager.startUploadAuto(this5000);  
  71.   
  72.     }  
  73.     /** 
  74.      * 【3】关闭自动上传我的位置 
  75.      */  
  76.     private void closeUptoUpMyAddr() {  
  77.         //设置自动上传的callback和时间间隔  
  78.         mManager.stopUploadAuto();  
  79.     }  
  80.   
  81.     /** 
  82.      * 【4】周边位置检索 
  83.      */  
  84.     private void nearBySearch(){  
  85.   
  86.         //构造请求参数,其中centerPt是自己的位置坐标  
  87.         RadarNearbySearchOption option = new RadarNearbySearchOption().centerPt(pt).pageNum(0).pageCapacity(50).radius(2000);  
  88.         //发起查询请求  
  89.         mManager.nearbyInfoRequest(option);  
  90.     }  
  91.     /** 
  92.      * 【5】清除用户信息 
  93.      */  
  94.     private void clearUserInfo(){  
  95.         mManager.clearUserInfo();  
  96.     }  
  97.   
  98.     /**********************************************下面是各种事件的回调**********************************************************************/  
  99.   
  100.     /** 
  101.      * 【1】单次上传位置的回调 
  102.      * @return 
  103.      */  
  104.     @Override  
  105.     public void onGetUploadState(RadarSearchError radarSearchError) {  
  106.         L.i("单次上传我的位置onGetUploadState");  
  107.         // TODO Auto-generated method stub  
  108.         if (radarSearchError == RadarSearchError.RADAR_NO_ERROR) {  
  109.             //上传成功  
  110.             L.i("上传位置成功");  
  111.             T.showLong(RabarActivity.this"上传位置成功");  
  112.         } else {  
  113.             //上传失败  
  114.             L.i("上传位置失败");  
  115.             T.showLong(RabarActivity.this"单次上传位置失败");  
  116.         }  
  117.     }  
  118.   
  119.   
  120.   
  121.     /** 
  122.      * 【2】自动上传位置的回调 
  123.      * @return 
  124.      */  
  125.     @Override  
  126.     public RadarUploadInfo onUploadInfoCallback() {  
  127.         // TODO Auto-generated method stub  
  128.         //实现上传callback,自动上传  
  129.         RadarUploadInfo info = new RadarUploadInfo();  
  130.         info.comments = "SmallCake0";  
  131.         info.pt = pt;  
  132.         return info;  
  133.     }  
  134.   
  135.     /** 
  136.      * 【4】周边位置检索回调 
  137.      * @param radarNearbyResult 
  138.      * @param radarSearchError 
  139.      */  
  140.     @Override  
  141.     public void onGetNearbyInfoList(RadarNearbyResult radarNearbyResult, RadarSearchError radarSearchError) {  
  142.         L.i("查询周边信息=="+radarSearchError+" 数据是否为空:"+(radarNearbyResult==null));  
  143.         switch (radarSearchError){  
  144.             case RADAR_NO_ERROR:  
  145.                 T.showLong(RabarActivity.this"查询周边成功");  
  146.                 break;  
  147.             case RADAR_NO_RESULT:  
  148.                 T.showLong(RabarActivity.this"没有使用此App的人员");  
  149.                 break;  
  150.             default:  
  151.                 T.showLong(RabarActivity.this"失败了!");  
  152.                 break;  
  153.         }  
  154.     }  
  155.   
  156.     /** 
  157.      * 【5】周边位置检索回调 
  158.      * @param radarSearchError 
  159.      */  
  160.     @Override  
  161.     public void onGetClearInfoState(RadarSearchError radarSearchError) {  
  162.         // TODO Auto-generated method stub  
  163.         if (radarSearchError == RadarSearchError.RADAR_NO_ERROR) {  
  164.             //清除成功  
  165.             T.showLong(RabarActivity.this"清除位置成功");  
  166.         } else {  
  167.             //清除失败  
  168.             T.showLong(RabarActivity.this"清除位置失败");  
  169.         }  
  170.     }  
  171.   
  172.     /** 
  173.      * 最后在停止使用周边雷达功能时,需释放资源 
  174.      * @return 
  175.      */  
  176.     private void clearAll(){  
  177.         //移除监听  
  178.         mManager.removeNearbyInfoListener(this);  
  179.         //清除用户信息  
  180.         mManager.clearUserInfo();  
  181.         //释放资源  
  182.         mManager.destroy();  
  183.         mManager = null;  
  184.     }  
  185.   
  186.     @Override  
  187.     protected void onDestroy() {  
  188.         super.onDestroy();  
  189.         clearAll();  
  190.     }  
  191.   
  192.     @Override  
  193.     public boolean onCreateOptionsMenu(Menu menu) {  
  194.         getMenuInflater().inflate(R.menu.menu_rabar,menu);  
  195.         return super.onCreateOptionsMenu(menu);  
  196.     }  
  197.   
  198.     @Override  
  199.     public boolean onOptionsItemSelected(MenuItem item) {  
  200.         int itemId = item.getItemId();  
  201.         switch (itemId){  
  202.             case R.id.menu1:  
  203.                 upMyAddr();  
  204.                 break;  
  205.             case R.id.menu2:  
  206.                 autoUpMyAddr();  
  207.                 break;  
  208.             case R.id.menu3:  
  209.                 closeUptoUpMyAddr();  
  210.                 break;  
  211.             case R.id.menu4:  
  212.                 nearBySearch();  
  213.                 break;  
  214.             case R.id.menu5:  
  215.                 clearUserInfo();  
  216.                 break;  
  217.         }  
  218.         return super.onOptionsItemSelected(item);  
  219.     }  
  220.   
  221. }  
使用遇到的坑:

1.最开始我没有mManager.setUserId();回调毫无反应!官网不是说可以为空,默认是设备标识吗!我就没有设置,好吧,我理解错了。

没有你也得设置个null,这样mManager.setUserId(null);

2.info.comments有长度获取其他限制,如果上次失败你就多试试吧。官网你给我说,你又坑我。

3.要想检索必须先上传自己的位置,我能说还有没有隐私了,偷偷写死自己位置!


最后,我还是没有检索出来范围的人,哪怕我自己也好啊!可以反馈的是没有错误,但是也没有结果!RADAR_NO_RESULT,想想你尝试很多次很多方法都是得到RADAR_NO_RESULT,我不得不开心的笑了!

阅读全文
0 0
原创粉丝点击