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

来源:互联网 发布:可可验证源码 编辑:程序博客网 时间:2024/05/21 17:32

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

第一步【注册周边雷达】

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


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

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


第三步【清除用户数据】

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


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

package cq.cake.chwl.ui;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import com.baidu.mapapi.model.LatLng;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;import com.baidu.mapapi.radar.RadarUploadInfoCallback;import cq.cake.base.BaseToolbarMapActivity;import cq.cake.chwl.R;import cq.cake.util.L;import cq.cake.util.T;/** * 周边雷达功能 * 查看周围都在使用此App的人群 * 利用周边雷达功能,可实现周边(处于同一个周边雷达关系内)用户位置信息检索的能力。 * 检索过程支持距离、时间等约束条件;返回结果支持按照距离、时间远近的排序。 */public class RabarActivity extends BaseToolbarMapActivity implements RadarSearchListener, RadarUploadInfoCallback {    RadarSearchManager mManager;    String userID = "100";    LatLng pt = new LatLng(106.465712,29.562483);    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_rabar);        init();    }    private void init() {        //周边雷达功能模块进行初始化        mManager = RadarSearchManager.getInstance();        //周边雷达设置监听        mManager.addNearbyInfoListener(this);        //周边雷达设置用户身份标识,id为空默认是设备标识        mManager.setUserID(userID);    }    /**     * 【1】上传我的位置     * 实际应用中应该取定位到当前位置的经纬度     * 重庆市渝中区沙坪坝师范大学:106.465712,29.562483     */    private boolean upMyAddr() {        //上传位置//        LatLng pt = new LatLng(106.466343, 29.563757);        RadarUploadInfo info = new RadarUploadInfo();        info.comments = "SmallCake";        info.pt = pt;        return mManager.uploadInfoRequest(info);    }    /**     * 【2】自动上传我的位置     */    private void autoUpMyAddr() {        //设置自动上传的callback和时间间隔        mManager.startUploadAuto(this, 5000);    }    /**     * 【3】关闭自动上传我的位置     */    private void closeUptoUpMyAddr() {        //设置自动上传的callback和时间间隔        mManager.stopUploadAuto();    }    /**     * 【4】周边位置检索     */    private void nearBySearch(){        //构造请求参数,其中centerPt是自己的位置坐标        RadarNearbySearchOption option = new RadarNearbySearchOption().centerPt(pt).pageNum(0).pageCapacity(50).radius(2000);        //发起查询请求        mManager.nearbyInfoRequest(option);    }    /**     * 【5】清除用户信息     */    private void clearUserInfo(){        mManager.clearUserInfo();    }    /**********************************************下面是各种事件的回调**********************************************************************/    /**     * 【1】单次上传位置的回调     * @return     */    @Override    public void onGetUploadState(RadarSearchError radarSearchError) {        L.i("单次上传我的位置onGetUploadState");        // TODO Auto-generated method stub        if (radarSearchError == RadarSearchError.RADAR_NO_ERROR) {            //上传成功            L.i("上传位置成功");            T.showLong(RabarActivity.this, "上传位置成功");        } else {            //上传失败            L.i("上传位置失败");            T.showLong(RabarActivity.this, "单次上传位置失败");        }    }    /**     * 【2】自动上传位置的回调     * @return     */    @Override    public RadarUploadInfo onUploadInfoCallback() {        // TODO Auto-generated method stub        //实现上传callback,自动上传        RadarUploadInfo info = new RadarUploadInfo();        info.comments = "SmallCake0";        info.pt = pt;        return info;    }    /**     * 【4】周边位置检索回调     * @param radarNearbyResult     * @param radarSearchError     */    @Override    public void onGetNearbyInfoList(RadarNearbyResult radarNearbyResult, RadarSearchError radarSearchError) {        L.i("查询周边信息=="+radarSearchError+" 数据是否为空:"+(radarNearbyResult==null));        switch (radarSearchError){            case RADAR_NO_ERROR:                T.showLong(RabarActivity.this, "查询周边成功");                break;            case RADAR_NO_RESULT:                T.showLong(RabarActivity.this, "没有使用此App的人员");                break;            default:                T.showLong(RabarActivity.this, "失败了!");                break;        }    }    /**     * 【5】周边位置检索回调     * @param radarSearchError     */    @Override    public void onGetClearInfoState(RadarSearchError radarSearchError) {        // TODO Auto-generated method stub        if (radarSearchError == RadarSearchError.RADAR_NO_ERROR) {            //清除成功            T.showLong(RabarActivity.this, "清除位置成功");        } else {            //清除失败            T.showLong(RabarActivity.this, "清除位置失败");        }    }    /**     * 最后在停止使用周边雷达功能时,需释放资源     * @return     */    private void clearAll(){        //移除监听        mManager.removeNearbyInfoListener(this);        //清除用户信息        mManager.clearUserInfo();        //释放资源        mManager.destroy();        mManager = null;    }    @Override    protected void onDestroy() {        super.onDestroy();        clearAll();    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.menu_rabar,menu);        return super.onCreateOptionsMenu(menu);    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        int itemId = item.getItemId();        switch (itemId){            case R.id.menu1:                upMyAddr();                break;            case R.id.menu2:                autoUpMyAddr();                break;            case R.id.menu3:                closeUptoUpMyAddr();                break;            case R.id.menu4:                nearBySearch();                break;            case R.id.menu5:                clearUserInfo();                break;        }        return super.onOptionsItemSelected(item);    }}
使用遇到的坑:

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

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

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

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


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


0 0
原创粉丝点击