自己用来记录的笔记-----百度定位 经纬度

当然第一步还是要去百度的官网查找相关的开发文档资料了,一般来说开发文档写的就比较简单易懂了,简单快速的开发只要查看文档就可以了

第二步就是去下载官方的dome 跑一遍程序 这样你就能看到 自己到底想要一个什么样的 对初步的怎么写也有了计划

我的需求就是需要一个简单的定位  需要用包名去官网 注册申请自己应用的ak(app key)然后放在自己的配置文件里面

meta-data 需要写在 application中 这句话是很关键的 我当时就是服务一直在报空指针 还不知道为什么 后来仔细检查了自己的项目和dome有什么不一样 发现配置文件中的位置不同  剩下的就是配置文件中的一些权限记得添加

然后就是导入jar 和需要so文件 还有在给导入的jar添加依赖  剩下的就可以按照自己的意愿删掉一些不需要的代码 之前遇到的问题就是 导入API之后 每次启动的时候 调起了一次方法之后 就在调不起这个方法了 一定要是从进程中杀死后 重新进入才能 再一次调起这个方法 后来查找了很多文档 才知道 连续定位比较重要的三个方法 是mLocationClient.start mLocationClient.stop mLocationClient.onReceiveLocation 三种方法的相互配合 而且要注意的是 start和stop是不能放在一起用的  下面这篇代码是连续定位一篇比较好的文章

public class LocationActivity extends Activity {

    Button mBtStart,mBtStop,mBtStartTimes;
    TextView mTvLog;

    public LocationClient mLocationClient = null;
    private MyLocationListener myListener = new MyLocationListener();
    LocationClientOption option;

    boolean mIsSingle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_location);
        mBtStart = (Button) findViewById(R.id.location_start);
        mBtStartTimes = (Button) findViewById(R.id.location_start_times);
        mBtStop = (Button) findViewById(R.id.location_stop);
        mTvLog = (TextView) findViewById(R.id.location_log);
        mTvLog.setMovementMethod(ScrollingMovementMethod.getInstance());

        mBtStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                start(0);
                mIsSingle = true;
            }
        });

        mBtStartTimes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                start(1000);
                mIsSingle = false;
            }
        });

        mBtStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                stop();
                mTvLog.setText("");
            }
        });


    }




    private void initLBS(int interval){

        mLocationClient = new LocationClient(getApplicationContext());
        //声明LocationClient类
        mLocationClient.registerLocationListener(myListener);
        //注册监听函数

        option = new LocationClientOption();

        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        //可选,设置定位模式,默认高精度
        //LocationMode.Hight_Accuracy:高精度;
        //LocationMode. Battery_Saving:低功耗;
        //LocationMode. Device_Sensors:仅使用设备;

        option.setCoorType("bd09ll");
        //可选,设置返回经纬度坐标类型,默认gcj02
        //gcj02:国测局坐标;
        //bd09ll:百度经纬度坐标;
        //bd09:百度墨卡托坐标;
        //海外地区定位,无需设置坐标类型,统一返回wgs84类型坐标

        option.setScanSpan(interval);
        //可选,设置发起定位请求的间隔,int类型,单位ms
        //如果设置为0,则代表单次定位,即仅定位一次,默认为0
        //如果设置非0,需设置1000ms以上才有效

        option.setOpenGps(true);
        //可选,设置是否使用gps,默认false
        //使用高精度和仅用设备两种定位模式的,参数必须设置为true

        //option.setLocationNotify(true);
        //可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false

        //option.setIgnoreKillProcess(false);
        //可选,定位SDK内部是一个service,并放到了独立进程。
        //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)

        //option.SetIgnoreCacheException(false);
        //可选,设置是否收集Crash信息,默认收集,即参数为false


        //option.setEnableSimulateGps(false);
        //可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false

        option.setIsNeedAddress(true);
        //可选,是否需要地址信息,默认为不需要,即参数为false
        //如果开发者需要获得当前点的地址信息,此处必须为true

        option.setIsNeedLocationDescribe(true);
        //可选,是否需要位置描述信息,默认为不需要,即参数为false
        //如果开发者需要获得当前点的位置信息,此处必须为true

        option.setIsNeedLocationPoiList(true);
        //可选,是否需要周边POI信息,默认为不需要,即参数为false
        //如果开发者需要获得周边POI信息,此处必须为true

        mLocationClient.setLocOption(option);
    }


    public void start(int interval){
        initLBS(interval);
        mLocationClient.start();
    }


    public void stop(){
        mLocationClient.stop();
    }


    public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
            //以下只列举部分获取经纬度相关(常用)的结果信息
            //更多结果信息获取说明,请参照类参考中BDLocation类中的说明

            double latitude = location.getLatitude();    //获取纬度信息
            double longitude = location.getLongitude();    //获取经度信息
            float radius = location.getRadius();    //获取定位精度,默认值为0.0f

            String coorType = location.getCoorType();
            //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
            int errorCode = location.getLocType();
            //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明

            textViewAddText(mTvLog,"latitude: "+latitude+"     longitude: "+longitude);

            String addr = location.getAddrStr();    //获取详细地址信息
            textViewAddText(mTvLog,"AddrStr: "+addr);
            String country = location.getCountry();    //获取国家
            textViewAddText(mTvLog,"country: "+country);
            String province = location.getProvince();    //获取省份
            textViewAddText(mTvLog,"province: "+province);
            String city = location.getCity();    //获取城市
            textViewAddText(mTvLog,"city: "+city);
            String district = location.getDistrict();    //获取区县
            textViewAddText(mTvLog,"district: "+district);
            String street = location.getStreet();    //获取街道信息
            textViewAddText(mTvLog,"street: "+street);

            String locationDescribe = location.getLocationDescribe();    //获取位置描述信息
            textViewAddText(mTvLog,"locationDescribe: "+locationDescribe);

            List<Poi> poiList = location.getPoiList();
            //获取周边POI信息
            //POI信息包括POI ID、名称等,具体信息请参照类参考中POI类的相关说明

            if (poiList != null){
                for (Poi poi : poiList){
                    textViewAddText(mTvLog,"Poi: "+poi.getName());
                }
            }

            textViewAddText(mTvLog,"----");

            if (mIsSingle)
                mLocationClient.stop();

        }
    }


    private void textViewAddText(TextView textView,String s){
        if (TextUtils.isEmpty(s))
            return;
        textView.setText(textView.getText()+"\n"+s);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值