歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 關於Android用戶定位獲取location值為null的解決方法

關於Android用戶定位獲取location值為null的解決方法

日期:2017/3/1 10:26:27   编辑:Linux編程

在玩一個GPS的東西 獲取Location一直為null 後來是從onLocationChanged裡面拿location才搞定了 貼一下吧 代碼太亂

  1. /**
  2. * 主要是用戶定位操作
  3. *@author jeedroid
  4. */
  5. package com.jeedroid.tools;
  6. import java.io.IOException;
  7. import java.util.List;
  8. import java.util.Locale;
  9. import Android.content.Context;
  10. import android.location.Address;
  11. import android.location.Criteria;
  12. import android.location.Geocoder;
  13. import android.location.Location;
  14. import android.location.LocationListener;
  15. import android.location.LocationManager;
  16. import android.os.Bundle;
  17. import android.provider.Settings;
  18. import android.util.Log;
  19. public class LocationTools
  20. {
  21. private Location location;
  22. public static LocationManager getLocationManager(Context context)
  23. {
  24. return (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
  25. }
  26. //獲取位置信息
  27. public String getAddress(Context context)
  28. {
  29. LocationManager locationManager = this.getLocationManager(context);
  30. if(!locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER))
  31. {
  32. //打開GPS 需Android2.2以上系統支持
  33. android.provider.Settings.Secure.setLocationProviderEnabled(context.getContentResolver(), LocationManager.GPS_PROVIDER, false);
  34. }
  35. return doWork(context);
  36. }
  37. private String doWork(Context context)
  38. {
  39. String addres="";
  40. LocationManager locationManager = this.getLocationManager(context);
  41. Criteria criteria = new Criteria();
  42. // 獲得最好的定位效果
  43. criteria.setAccuracy(Criteria.ACCURACY_FINE);
  44. criteria.setAltitudeRequired(false);
  45. criteria.setBearingRequired(false);
  46. criteria.setCostAllowed(false);
  47. // 使用省電模式
  48. criteria.setPowerRequirement(Criteria.POWER_LOW);
  49. String provider =locationManager.getBestProvider(criteria, true);
  50. Log.i("provider>>>>>>", provider);
  51. //獲得當前位置 location為空是一直取 從onLocationChanged裡面取
  52. while(location==null)
  53. {
  54. location =locationManager.getLastKnownLocation(provider);
  55. }
  56. //locationListener
  57. LocationListener locationListener = new LocationListener()
  58. {
  59. @Override
  60. public void onLocationChanged(Location location)
  61. {
  62. LocationTools.this.location=location;
  63. }
  64. @Override
  65. public void onProviderDisabled(String provider)
  66. {
  67. }
  68. @Override
  69. public void onProviderEnabled(String provider)
  70. {
  71. }
  72. @Override
  73. public void onStatusChanged(String provider, int status, Bundle extras)
  74. {
  75. }
  76. };
  77. locationManager.requestLocationUpdates(provider, 1000, 10, locationListener);
  78. Geocoder geo = new Geocoder(context,Locale.getDefault());
  79. try
  80. {
  81. List<Address> address=geo.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
  82. if(address.size()>0)
  83. {
  84. addres=address.get(0).getAddressLine(0);
  85. }
  86. } catch (IOException e)
  87. {
  88. // TODO Auto-generated catch block
  89. e.printStackTrace();
  90. }
  91. return addres;
  92. }
  93. }
Copyright © Linux教程網 All Rights Reserved