温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android中怎么使用百度定位SDK方法

发布时间:2021-07-20 14:55:58 来源:亿速云 阅读:264 作者:Leah 栏目:移动开发

这篇文章将为大家详细讲解有关Android中怎么使用百度定位SDK方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1、首先***步就是搭配环境:

①先将百度demo中的libs文件夹复制到自己的工程。(别忘记把jar包build path)

②然后复制

<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" android:permission="android.permission.BAIDU_LOCATION_SERVICE">     <intent-filter>           <action android:name="com.baidu.location.service_v2.6"></action>     </intent-filter> </service>

到manifest的application节点。

接下来复制百度地位SDK需要的permission

       <permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission> <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE">        </uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">        </uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">        </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">        </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">        </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE">        </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE">        </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">        </uses-permission> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">        </uses-permission> <uses-permission android:name="android.permission.READ_LOGS"></uses-permission>

③ 接下来就可以在代码中放心的使用百度定位SDK了。

下面是来自百度的提醒,需要注意的是第五条,因为我们***次经常定位不到位置:

1、您需要确保程序编译通过。如果对自己写的代码有疑问,可以下载官方高级示例,查看标准源代码。

2、请确保网络通畅,无论是连接wifi还是使用2G/3G信号。

3、定位SDK的调用必须在主线程中。

4、必须在定位SDK启动前设定好参数,例如是否使用GPS,扫描时间间隔设置等。我们强烈建议您设置自己的prodName,并保管好,这样方便我们为您提供更好的定位服务。

5、定位SDK start之后立即执行,这种情况下很难定位成功,因为定位SDK刚开始启动还没有获取到定位信息。这时getlocation一般为null。如果是要获取位置成功,可以在listerner中添加一个判断如果strData为空,则再发起一次定位。

6、定位覆盖率大概在98%。就是说有2%可能服务器没有数据,所以定位会失败。只需要走到别的地方,或者多试几次即可成功定位。

7、请使用真机。在虚拟机上无法进行定位测试。

下面就是我的事例代码:

具体思路是:将开启和获取位置的代码分开来做,可以在程序刚开启的时候就start。因为据上面所说,有时候可能两分钟才能获取到位置,对于我们需要展示信息来说,这是绝对不可以的。如果在主线程卡两分钟后果可想而知的。

需要说名的是:我这里没有设置时间间隔public void setScanSpan ( int ) //设置定时定位的时间间隔。单位ms,如果不设置或者所设置的整数值小于1000(ms)时,采用***次定位模式。

每调用一次requestLocatin(),定位SDK会发起一次定位。请求定位与监听结果一一对应;如果所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。

调用requestLocation( )后,每隔设定的时间,定位SDK就会进行一次定位。如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求,返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。

定时定位时,调用一次requestLocation,会定时监听到定位结果。设定了定时定位后,可以热切换成一次定位,需要重新设置时间间隔小于1000(ms)即可。locationClient对象stop后,将不再进行定位。 如果设定了定时定位模式后,多次调用requestLocation(),则是每隔一段时间进行一次定位,同时额外的定位请求也会进行定位,但频率不会超过1秒一次。

import android.content.Context;  import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.palmdeal.entity.LocationInfo.SItude; import com.palmdeal.util.Logger;  public class LocationProvider {     private static LocationClient mLocationClient = null;      private static SItude station = new SItude();     private static MyBDListener listener = new MyBDListener();      Context context;      public LocationProvider(Context context) {         super();         this.context = context;     }      public void startLocation() {         mLocationClient = new LocationClient(context);         LocationClientOption option = new LocationClientOption();         option.setOpenGps(true); // 打开gps         option.setCoorType("bd09ll"); // 设置坐标类型为bd09ll         option.setPriority(LocationClientOption.NetWorkFirst); // 设置网络优先         option.setProdName("demo"); // 设置产品线名称         mLocationClient.setLocOption(option);         mLocationClient.registerLocationListener(listener);         mLocationClient.start();//将开启与获取位置分开,就可以尽量的在后面的使用中获取到位置     }      /**      * 停止,减少资源消耗      */     public void stopListener() {         if (mLocationClient != null && mLocationClient.isStarted()) {             mLocationClient.stop();             mLocationClient = null;         }     }      /**      * 更新位置并保存到SItude中      */     public void updateListener() {         if (mLocationClient != null && mLocationClient.isStarted()) {             mLocationClient.requestLocation();             Logger.i("update the location");         }     }      /**      * 获取经纬度信息      *       * @return      */     public SItude getLocation() {         return station;     }      private static class MyBDListener implements BDLocationListener {          @Override         public void onReceiveLocation(BDLocation location) {             if (location.getCity() == null) {                 int type = mLocationClient.requestLocation();                 Logger.e("first request false" + type);             }             station.latitude = location.getLatitude();             station.longitude = location.getLongitude();         }          @Override         public void onReceivePoi(BDLocation arg0) {             // return         }      } }

在使用的时候,在一开始就开启LocationClient,即调用startLocation()方法。我的是在服务服务中的onCreate中调用的,然后在代码中这样使用:

LocationInfo.SItude station = location.getLocation(); if (station.latitude == 0.0 && station.longitude == 0.0) {       location.updateListener();       station = location.getLocation(); } if (station.latitude == 0.0 && station.longitude == 0.0) {        return "未定位到您现在的位置,请重试"; } location.stopListener();

关于Android中怎么使用百度定位SDK方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI