码迷,mamicode.com
首页 > 移动开发 > 详细

15.手机定位

时间:2015-10-29 21:53:40      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
  1. /**
  2. * 获取经纬度坐标的service
  3. *
  4. * @author Kevin
  5. *
  6. */
  7. public class LocationService extends Service {
  8. private LocationManager lm;
  9. private MyLocationListener listener;
  10. private SharedPreferences mPref;
  11. @Override
  12. public IBinder onBind(Intent intent) {
  13. return null;
  14. }
  15. @Override
  16. public void onCreate() {
  17. super.onCreate();
  18. mPref = getSharedPreferences("config", MODE_PRIVATE);
  19. lm = (LocationManager) getSystemService(LOCATION_SERVICE);
  20. // List<String> allProviders = lm.getAllProviders();// 获取所有位置提供者
  21. // System.out.println(allProviders);
  22. Criteria criteria = new Criteria();//条件、标准
  23. criteria.setCostAllowed(true);// 是否允许付费,比如使用3g网络定位
  24. criteria.setAccuracy(Criteria.ACCURACY_FINE);//精确度
  25. String bestProvider = lm.getBestProvider(criteria, true);// 获取最佳位置提供者
  26. listener = new MyLocationListener();
  27. lm.requestLocationUpdates(bestProvider, 0, 0, listener);// 参1表示位置提供者,参2表示最短更新时间,参3表示最短更新距离
  28. }
  29. class MyLocationListener implements LocationListener {
  30. // 位置发生变化
  31. @Override
  32. public void onLocationChanged(Location location) {
  33. System.out.println("get location!");
  34. // 将获取的经纬度保存在sp中
  35. mPref.edit()
  36. .putString(
  37. "location",
  38. "j:" + location.getLongitude() + "; w:"
  39. + location.getLatitude()).commit();
  40. stopSelf();//停掉service
  41. }
  42. // 位置提供者状态发生变化
  43. @Override
  44. public void onStatusChanged(String provider, int status, Bundle extras) {
  45. System.out.println("onStatusChanged");
  46. }
  47. // 用户打开gps
  48. @Override
  49. public void onProviderEnabled(String provider) {
  50. System.out.println("onProviderEnabled");
  51. }
  52. // 用户关闭gps
  53. @Override
  54. public void onProviderDisabled(String provider) {
  55. System.out.println("onProviderDisabled");
  56. }
  57. }
  58. @Override
  59. public void onDestroy() {
  60. super.onDestroy();
  61. lm.removeUpdates(listener);// 当activity销毁时,停止更新位置, 节省电量
  62. }
<service android:name=".service.LocationService" > </service>
但是上边获取的坐标是火星坐标,需要转换

火星坐标
  • 凡事从电子地图上面查得的坐标都不是真实地坐标,国家处于安全考虑,所有电子地图上市都必须经过审核,审核里面必然涉及坐标算法加密,你在地图上看到的坐标都是经算法加密后的坐标,是经过平移旋转等一系列变化的,各地的算法还都不一样。加密后的坐标也常被人称为火星坐标系统,这是我们的国家又一个伟大的发明,让国外的政府和企业等,都看不懂我们的坐标系统。介于你的问题,GPS定位出来的点的绝对位置是准确的,但百度地图本身却是个火星地图,所以会产生这样的问题。
代码见附件:把坐标输上运行就可以看到真实坐标了

 










附件列表

     

    15.手机定位

    标签:

    原文地址:http://www.cnblogs.com/liuyu0529/p/4921712.html

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!