2015-04-08 3 views
0

Я пытаюсь получить свое местоположение. Но ноль - это все, что у меня есть. Пожалуйста, посмотрите на код:Местоположение null в android

public class ListBranchesActivity extends Activity {  

    private double lat, lon; 

    private LocationManager lm; 
    private Location location; 

    private final LocationListener locationListener = new LocationListener() { 
     public void onLocationChanged(Location location) { 
      lon = location.getLongitude(); 
      lat = location.getLatitude(); 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 

     } 
    }; 

А потом где-то в onCreate():

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, 
       locationListener); 
     location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

Следующий код возвращает NullPointerException:

Log.w("es09", "coordinates are " + lon + " " + lat +" " +location.getLatitude()+" "+ location.getLongitude()); 

И этот код возвращает "координаты 0.0 0.0"

Log.w("es09", "coordinates are " + lon + " " + lat); 

Мои фактические разрешения:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_GPS"/> 
    <uses-permission android:name="android.permission.ACCESS_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS"/> 

Что не так?

+0

Кажется, что 'onLocationChanged' еще не вызвал, потому что вы установили' minDistance' на 10 метров. Поэтому измените minDistance на 10 до 0 метров и измените местоположение устройства, чтобы вызвать onLocationChanged, т. Е. изменить как 'lm.requestLocationUpdates (LocationManager.GPS_PROVIDER, 2000, 0, locationListener);' –

+0

Не помогает. onLocationChanged() не называется – Tony

ответ

0

Используй NETWORK_PROVIDER, чтобы получить местоположение, потому что много раз GPS будет давать нулевую широту и долготу

m_locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, this); 
    m_location = m_locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

Добавить ниже разрешений в очевидном

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
1

Проблемы в том, что вы предполагаете, что вы всегда получите назад, и это не так. Нет никакой гарантии, что вам будет возвращено место, поэтому вам нужно проверить значение null.

использование

lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

нет никакой гарантии, что последнее место существует, в любое время вы получите место, где вы всегда должны проверить, чтобы убедиться, что он не является нулевым FIRST!

+0

Так почему я не могу получить нормальное местоположение? – Tony

+0

, потому что у вас нет блокировки GPS, т.е. вы находитесь в помещении или что-то – tyczj

+0

Как я могу это исправить? – Tony

Смежные вопросы