天天看点

百度sdk定位不成功,关闭定位

公司项目有用到百度地图,登录的时候需要定位一次,获取登录的地址信息,在手机无法连接外网的情况,也就无法访问百度定位服务器的时候,定位的回调函数要30秒以上才能返回结果,于是去仔细查百度api,发现没有设置回调函数时间的方法或者属性.

解决办法就是把回调函数参数赋值给实例变量

/** 

 * 实现实位回调监听,如果访问百度定位服务器成功就会把结果赋值给location 

 * 否则这个location为null 

 */  

public class mylocationlistener implements bdlocationlistener {  

    @override  

    public void onreceivelocation(bdlocation db) {  

        location=db;  

    }  

}  

开启一个延时2.5秒的线程,在线程中判断回调函数有没有调用......如果手机能连接外网并且能成功访问百度服务器的话,2秒左右能返回结果

//延迟2.5秒执行locationresult()  

//正常情况下访问百度定位服务器只需要2秒  

new handler().postdelayed(new runnable() {  

    public void run() {  

        if(null==location){//为空表示百度sdk定位失败  

        }else{//定位成功  

        }  

}, 2500);  

完整代码如下:

package com.baidu.baidulocationdemo;  

import com.baidu.location.bdlocation;  

import com.baidu.location.bdlocationlistener;  

import com.baidu.location.locationclient;  

import com.baidu.location.locationclientoption;  

import android.os.bundle;  

import android.os.handler;  

import android.app.activity;  

import android.util.log;  

import android.view.view;  

import android.view.view.onclicklistener;  

import android.widget.textview;  

public class mainactivity extends activity {  

    public locationclient locationclient;  

    private bdlocation location;  

    private textview mlocationresult;  

    protected void oncreate(bundle savedinstancestate) {  

        super.oncreate(savedinstancestate);  

        setcontentview(r.layout.activity_main);  

        mlocationresult=(textview) findviewbyid(r.id.location_result);  

        findviewbyid(r.id.start_location).setonclicklistener(clicklistener);  

        findviewbyid(r.id.stop_location).setonclicklistener(clicklistener);  

        locationclientoption option = new locationclientoption();  

        option.setcoortype("bd09ll");//设置坐标类型  

        locationclient = new locationclient(this);  

        locationclient.registerlocationlistener(new mylocationlistener());  

        locationclient.setlocoption(option);  

    private onclicklistener clicklistener=new onclicklistener(){  

        @override  

        public void onclick(view v) {  

            switch (v.getid()) {  

            case r.id.start_location:  

                locationclient.start();  

                //延迟2.5秒执行locationresult()  

                //正常情况下访问百度定位服务器只需要2秒  

                new handler().postdelayed(new runnable() {  

                    @override  

                    public void run() {  

                        locationresult();  

                    }  

                }, 2500);  

                break;  

            case r.id.stop_location:  

                distory();  

            }  

    };  

    /** 

     * 实现实位回调监听,如果访问百度定位服务器成功就会把结果赋值给location 

     * 否则这个location为null 

     */  

    public class mylocationlistener implements bdlocationlistener {  

        public void onreceivelocation(bdlocation db) {  

            location=db;  

    private void locationresult(){  

            location=new bdlocation();  

        //receive location   

        stringbuffer sb = new stringbuffer(256);  

        sb.append("time : ");  

        sb.append(location.gettime());  

        sb.append("\nerror code : ");  

        sb.append(location.getloctype());  

        sb.append("\nlatitude : ");  

        sb.append(location.getlatitude());  

        sb.append("\nlontitude : ");  

        sb.append(location.getlongitude());  

        sb.append("\nradius : ");  

        sb.append(location.getradius());  

        if (mlocationresult != null)  

            mlocationresult.settext(sb.tostring());  

        log.i("baidulocationapidem", sb.tostring());  

        distory();  

    private void distory(){//关闭定位  

         if (locationclient != null && locationclient.isstarted()) {  

             locationclient.stop();  

         }  

效果图如下:

百度sdk定位不成功,关闭定位

推荐下自己创建的android qq群:202928390   欢迎大家的加入.

继续阅读