百度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   欢迎大家的加入.

时间: 2024-08-31 07:02:41

百度sdk定位不成功,关闭定位的相关文章

openGPS.cn - 浏览器定位技术探讨(HTML5定位)

    浏览器定位,也就是HTML5定位,据我目前的理解,这俩其实是一个概念.都是随着html5技术的发展而开始进入大众视野. ​原文连接发布在https://www.opengps.cn/Share/Article/View.aspx?id=7,内容更新以这里为准.      站长基于浏览器定位,制作了2个页面      实时位置共享:实现类似于微信的好友实时位置功能,点击连接体验 .目前本站点的浏览器定位已经支持wgs84坐标的自动纠偏,gcj02的纠偏处理尚未加入     浏览器定位功能测

sdk-android studio 配置百度SDK定位失败

问题描述 android studio 配置百度SDK定位失败 就实现基础的定位功能,下面是主activity import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.baidu.location.

用android studio使用百度SDK定位报错Couldn't load locSDK4d

问题描述 用android studio使用百度SDK定位报错Couldn't load locSDK4d 用eclipes开发的时候直接把文件夹复制到libs下就可以,然后引用下JAR包, 但是在android studio 做同样操作,如下 运行时候就会报错,如下 改文件名不行,求指教. 解决方案 你试试放到同一个工作空间 解决方案二: 忘记在gradle文件中修改jni目录了吧?

百度 定位-百度sdk定位如何设置超时

问题描述 百度sdk定位如何设置超时 Android项目中用到了百度sdk定位,手机无法访问百度服务器的时候,定位的回调函数要30秒才能调用,我能设置5秒或者10秒吗? 求大神解答

ios百度地图的使用(普通定位、反地理编码)_IOS

iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置),下面通过代码给大家详解,代码如下: #import <CoreLocation/CoreLocation.h> 使用到的头文件 要引入CoreLocation这个包 <CLLocationManagerDelegate> 使用的代理名称 //1.使用定位服务 //设置app有访问定位服务的权限 //在使用应用期间 / 始终(app在后台) //info.plist文件添加以下两条(或者其中一条): //NSLoc

添加了百度定位或者是高德定位出现类找不到的问题

问题描述 添加了百度定位或者是高德定位出现类找不到的问题 . 我本以为百度地图定位API跟环信冲突了 ,然后换高德了 , 还是出现class not found问题 .(我也是醉了) 但我把定位API去除后就没有发现问题了.下面是我build文件 //apply plugin: 'me.tatarka.retrolambda'//apply plugin: 'android-sdk-manager' //让你的sdk 依赖的东西可以降级 100毫秒build你的项目!!apply plugin:

安卓调用的是百度地图的接口,对定位的位置进行周边搜索,刚刚学一点不会弄,大神们帮帮忙啊

问题描述 安卓调用的是百度地图的接口,对定位的位置进行周边搜索,刚刚学一点不会弄,大神们帮帮忙啊 安卓调用的是百度地图的接口,对定位的位置进行周边搜索,刚刚学一点不会弄,大神们帮帮忙啊 解决方案 你可以参考下百度地图API的DEMO啊,里边有POI相关的

百度地图api根据服务器坐标定位

问题描述 百度地图api根据服务器坐标定位 // 取本地经纬度 myLatitude = location.getLatitude(); myLongitude = location.getLongitude(); city = location.getCity(); stNode = PlanNode.withLocation(new LatLng(myLatitude, myLongitude)); enNode = PlanNode.withCityNameAndPlaceName(cit

后台定位 百度地图-IOS 百度地图支持后台的持续定位吗?

问题描述 IOS 百度地图支持后台的持续定位吗? IOS 的百度地图支持后台的持续定位吗,如果支持请问这么实现了.新手上路,如有帮助必定万分感谢,忘知道的人可怜一下. 解决方案 貌似ios7以后就有选项支持后台程序刷新数据了 可以的.