Android 百度地图的简单定位

来源:互联网 发布:比利时杀童案背后知乎 编辑:程序博客网 时间:2024/04/29 14:34

不是什么难度大的问题,就是遇到一些正常操作之后,代码不好使的问题,所以想要记录下来

问题一

jar包一定要全,无论是什么CPU的so文件包,都要包含在里边

这里写图片描述

问题二

详细比对下 你的KEY值,确认不是别人的KEY值,顺便确认下你的定位service是否声明

这里写图片描述

问题三

接下来就是百度的代码了,官网上都有,这里就不在赘述了,但一定要记得销毁的时候,关闭service啊,记得调用requestLocation()去定位即可

import android.app.Application;import android.content.Context;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;/** * @author baidu */public class LocationService {    private LocationClient client = null;    private LocationClientOption mOption, DIYoption;    private Object objLock = new Object();    /***     *     * @param locationContext     */    public LocationService(Application locationContext) {        synchronized (objLock) {            if (client == null) {                client = new LocationClient(locationContext);                client.setLocOption(getDefaultLocationClientOption());            }        }    }    /***     *     * @param listener     * @return     */    public boolean registerListener(BDLocationListener listener) {        boolean isSuccess = false;        if (listener != null) {            client.registerLocationListener(listener);            isSuccess = true;        }        return isSuccess;    }    public void unregisterListener(BDLocationListener listener) {        if (listener != null) {            client.unRegisterLocationListener(listener);        }    }    /***     *     * @param option     * @return isSuccessSetOption     */    public boolean setLocationOption(LocationClientOption option) {        boolean isSuccess = false;        if (option != null) {            if (client.isStarted())                client.stop();            DIYoption = option;            client.setLocOption(option);        }        return isSuccess;    }    public LocationClientOption getOption() {        return DIYoption;    }    /***     *     * @return DefaultLocationClientOption     */    public LocationClientOption getDefaultLocationClientOption() {        if (mOption == null) {            mOption = new LocationClientOption();//            mOption.setLocationMode(LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备            mOption.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;            mOption.setScanSpan(15 * 60 * 1000);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的//            mOption.setOpenGps(true);//            mOption.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要//            mOption.setIsNeedLocationDescribe(true);//可选,设置是否需要地址描述//            mOption.setNeedDeviceDirect(false);//可选,设置是否需要设备方向结果//            mOption.setLocationNotify(false);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果//            mOption.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死//            mOption.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”//            mOption.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到//            mOption.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集        }        return mOption;    }    public void start() {        synchronized (objLock) {            if (client != null && !client.isStarted()) {                client.start();            }        }    }    public void stop() {        synchronized (objLock) {            if (client != null && client.isStarted()) {                client.stop();            }        }    }    public void requestLocation() {        synchronized (objLock) {            if (client != null && client.isStarted()) {                client.requestLocation();            }        }    }}