LBSLocation.java 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.baidu.lbs.duanzu.bdapi;
  2. import android.location.Location;
  3. import com.baidu.lbs.duanzu.ContentModel;
  4. import com.baidu.lbs.duanzu.DemoApplication;
  5. import com.baidu.location.BDLocation;
  6. import com.baidu.location.BDLocationListener;
  7. import com.baidu.location.LocationClient;
  8. import com.baidu.location.LocationClientOption;
  9. /**
  10. * 百度定位API使用类,启动定位,当返回定位结果是停止定位
  11. *
  12. * @author Lu.Jian
  13. *
  14. */
  15. public class LBSLocation {
  16. private static LBSLocation location = null;
  17. private static DemoApplication app = null;
  18. private MyLocationListenner myListener = new MyLocationListenner();
  19. public LocationClient mLocationClient = null;
  20. public static LBSLocation getInstance(DemoApplication application) {
  21. app = application;
  22. if (location == null) {
  23. location = new LBSLocation(app);
  24. }
  25. return location;
  26. }
  27. private LBSLocation(DemoApplication app) {
  28. mLocationClient = new LocationClient(app);
  29. mLocationClient.registerLocationListener(myListener);
  30. mLocationClient.start();
  31. }
  32. /**
  33. * 开始定位请求,结果在回调中
  34. */
  35. public void startLocation() {
  36. LocationClientOption option = new LocationClientOption();
  37. option.setOpenGps(true);
  38. option.setAddrType("all");// 返回的定位结果包含地址信息
  39. option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
  40. option.disableCache(true);// 禁止启用缓存定位
  41. mLocationClient.setLocOption(option);
  42. mLocationClient.requestLocation();
  43. }
  44. /**
  45. * 监听函数,有新位置的时候,格式化成字符串,输出到屏幕中
  46. */
  47. public class MyLocationListenner implements BDLocationListener {
  48. @Override
  49. public void onReceiveLocation(BDLocation location) {
  50. if (location == null)
  51. return;
  52. app.currlocation = location;
  53. mLocationClient.stop();
  54. //根据当前位置,计算列表中每一项的距离
  55. for (ContentModel content : app.getList()) {
  56. float results[] = new float[1];
  57. if (location != null) {
  58. Location.distanceBetween(location.getLatitude(),
  59. location.getLongitude(), content.getLatitude(),
  60. content.getLongitude(), results);
  61. }
  62. int distance = (int) results[0];
  63. content.setDistance(distance == 0 ? "" : (int) results[0] + "米");
  64. }
  65. //刷新列表
  66. app.getAdapter().notifyDataSetChanged();
  67. }
  68. public void onReceivePoi(BDLocation poiLocation) {
  69. }
  70. }
  71. }