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

简介:

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


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

  1. /** 
  2.  * 实现实位回调监听,如果访问百度定位服务器成功就会把结果赋值给location 
  3.  * 否则这个location为null 
  4.  */  
  5. public class MyLocationListener implements BDLocationListener {  
  6.     @Override  
  7.     public void onReceiveLocation(BDLocation db) {  
  8.         location=db;  
  9.     }  
  10. }  


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

  1. //延迟2.5秒执行locationResult()  
  2. //正常情况下访问百度定位服务器只需要2秒  
  3. new Handler().postDelayed(new Runnable() {  
  4.     @Override  
  5.     public void run() {  
  6.         if(null==location){//为空表示百度sdk定位失败  
  7.           
  8.         }else{//定位成功  
  9.           
  10.         }  
  11.     }  
  12. }, 2500);  

完整代码如下:

  1. package com.baidu.baidulocationdemo;  
  2.   
  3. import com.baidu.location.BDLocation;  
  4. import com.baidu.location.BDLocationListener;  
  5. import com.baidu.location.LocationClient;  
  6. import com.baidu.location.LocationClientOption;  
  7.   
  8. import android.os.Bundle;  
  9. import android.os.Handler;  
  10. import android.app.Activity;  
  11. import android.util.Log;  
  12. import android.view.View;  
  13. import android.view.View.OnClickListener;  
  14. import android.widget.TextView;  
  15.   
  16. public class MainActivity extends Activity {  
  17.     public LocationClient locationClient;  
  18.     private BDLocation location;  
  19.       
  20.     private TextView mLocationResult;  
  21.   
  22.     @Override  
  23.     protected void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.activity_main);  
  26.           
  27.         mLocationResult=(TextView) findViewById(R.id.location_result);  
  28.         findViewById(R.id.start_location).setOnClickListener(clickListener);  
  29.         findViewById(R.id.stop_location).setOnClickListener(clickListener);  
  30.           
  31.         LocationClientOption option = new LocationClientOption();  
  32.         option.setCoorType("bd09ll");//设置坐标类型  
  33.         locationClient = new LocationClient(this);  
  34.         locationClient.registerLocationListener(new MyLocationListener());  
  35.         locationClient.setLocOption(option);  
  36.     }  
  37.       
  38.     private OnClickListener clickListener=new OnClickListener(){  
  39.         @Override  
  40.         public void onClick(View v) {  
  41.             switch (v.getId()) {  
  42.             case R.id.start_location:  
  43.                 locationClient.start();  
  44.                   
  45.                 //延迟2.5秒执行locationResult()  
  46.                 //正常情况下访问百度定位服务器只需要2秒  
  47.                 new Handler().postDelayed(new Runnable() {  
  48.                     @Override  
  49.                     public void run() {  
  50.                         locationResult();  
  51.                     }  
  52.                 }, 2500);  
  53.                   
  54.                 break;  
  55.             case R.id.stop_location:  
  56.                 distory();  
  57.                 break;  
  58.             }  
  59.         }  
  60.     };  
  61.       
  62.     /** 
  63.      * 实现实位回调监听,如果访问百度定位服务器成功就会把结果赋值给location 
  64.      * 否则这个location为null 
  65.      */  
  66.     public class MyLocationListener implements BDLocationListener {  
  67.         @Override  
  68.         public void onReceiveLocation(BDLocation db) {  
  69.             location=db;  
  70.         }  
  71.     }  
  72.       
  73.     private void locationResult(){  
  74.         if(null==location){//为空表示百度sdk定位失败  
  75.             location=new BDLocation();  
  76.         }  
  77.         //Receive Location   
  78.         StringBuffer sb = new StringBuffer(256);  
  79.         sb.append("time : ");  
  80.         sb.append(location.getTime());  
  81.         sb.append("\nerror code : ");  
  82.         sb.append(location.getLocType());  
  83.         sb.append("\nlatitude : ");  
  84.         sb.append(location.getLatitude());  
  85.         sb.append("\nlontitude : ");  
  86.         sb.append(location.getLongitude());  
  87.         sb.append("\nradius : ");  
  88.         sb.append(location.getRadius());  
  89.           
  90.         if (mLocationResult != null)  
  91.             mLocationResult.setText(sb.toString());  
  92.           
  93.         Log.i("BaiduLocationApiDem", sb.toString());  
  94.         distory();  
  95.     }  
  96.       
  97.     private void distory(){//关闭定位  
  98.          if (locationClient != null && locationClient.isStarted()) {  
  99.              locationClient.stop();  
  100.          }  
  101.     }  
  102. }  

效果图如下:


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

目录
相关文章
|
9月前
|
定位技术 API 开发工具
Android 按照步骤接入百度地图API,定位显示不了解决办法
Android 按照步骤接入百度地图API,定位显示不了解决办法
246 0
|
10月前
|
数据可视化 定位技术 API
百度地图开发:海量点、测距以及定位聚合功能
百度地图开发:海量点、测距以及定位聚合功能
221 0
|
10月前
|
移动开发 小程序 JavaScript
微信小程序学习实录6(百度经纬度采集、手动调整精度、H5嵌入小程序、百度地图jsAPI、实时定位、H5更新自动刷新)
微信小程序学习实录6(百度经纬度采集、手动调整精度、H5嵌入小程序、百度地图jsAPI、实时定位、H5更新自动刷新)
139 1
|
8月前
|
定位技术
|
10月前
|
搜索推荐 数据可视化 JavaScript
数据可视化大屏百度地图绘制行政区域标注实战案例解析(个性化地图、标注、视频、控件、定位、检索)
数据可视化大屏百度地图绘制行政区域标注实战案例解析(个性化地图、标注、视频、控件、定位、检索)
133 1
|
10月前
|
前端开发 定位技术 数据安全/隐私保护
百度地图高级开发:LBS服务实时定位覆盖范围内关键词标注的解决方案(2)
百度地图高级开发:LBS服务实时定位覆盖范围内关键词标注的解决方案(2)
61 0
|
10月前
|
移动开发 定位技术 API
百度地图开发:H5获取GPS-wg84经纬度与百度定位API的偏差测试
百度地图开发:H5获取GPS-wg84经纬度与百度定位API的偏差测试
143 0
|
10月前
|
安全 定位技术 网络安全
百度地图开发:调用jsAPI实现实时定位的解决方案及常见问题
百度地图开发:调用jsAPI实现实时定位的解决方案及常见问题
454 0
|
10月前
|
定位技术
百度地图开发实战案例:展示当前定位多少千米内的POI(兴趣点)
百度地图开发实战案例:展示当前定位多少千米内的POI(兴趣点)
61 0
|
10月前
|
移动开发 定位技术
百度地图H5手机端自动定位并更换图标的解决方案
百度地图H5手机端自动定位并更换图标的解决方案
123 0