2017-01-17 10 views
0

Есть ли способ получить местоположение (широту и долготу) сразу после того, как пользователь включил службы определения местоположения? С кодом, который у меня есть сейчас, когда пользователь разрешает услуги определения местоположения в первый раз, я получаю 0.0 для широты и долготы, и после этого он отлично работает. Поэтому мой вопрос заключается в том, как я могу получить широту и долготу сразу после того, как пользователь включит службы определения местоположения?Получить местоположение сразу после включения служб определения местоположения

GPSTracker.java

public class GPSTracker implements LocationListener { 

private Context context; 
private double longitude; 
private double latitude; 
private LocationManager locationManager; 
private Location location; 
private boolean isGPSEnabled; 
private boolean isNetworkEnabled; 
private boolean canGetLocation; 

public GPSTracker(Context context) { 
    this.context = context; 
    getLocation(); 
} 

public Location getLocation() { 
    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

    if (!PermissionsManager.getInstance(context).checkLocationPermission((Activity) context)) { 
     PermissionsManager.getInstance(context).requestLocationPermissions((Activity) context); 
    } else { 
     if (!isGPSEnabled && !isNetworkEnabled) { 

      canGetLocation = false; 
     } else { 
      canGetLocation = true; 
      if (isNetworkEnabled) { 
       locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, Constants.MIN_TIME_BETWEEN_UPDATES, Constants.MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       if (locationManager != null) { 
        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        updateGPSCoordinates(); 
       } 
      } 

      if (isGPSEnabled) { 
       if (location == null) { 
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, Constants.MIN_TIME_BETWEEN_UPDATES, Constants.MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         updateGPSCoordinates(); 
        } 
       } 
      } 
     } 
    } 

    return location; 
} 

public void updateGPSCoordinates() { 
    if (location != null) { 
     longitude = location.getLongitude(); 
     latitude = location.getLatitude(); 
    } 
} 

public double getLatitude() { 
    if (location != null) { 
     latitude = location.getLatitude(); 
    } 
    return latitude; 
} 

public double getLongitude() { 
    if (location != null) { 
     longitude = location.getLongitude(); 
    } 
    return longitude; 
} 

public boolean canGetLocation() { 
    return this.canGetLocation; 
} 

@Override 
public void onLocationChanged(Location location) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

}

ответ

0

Вы можете добиться того, что при наличии Broadcast Receiver для поставщика изменений, как GPS включен/выключен. Выполните следующий код для реализации. В манифесте поставить метку приемника следующим образом

<receiver android:name=".YourReceiverName"> 
<intent-filter> 
    <action android:name="android.location.PROVIDERS_CHANGED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

Receiver.java

public class YourBroadcastReceiver extends BroadcastReceiver {   
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) { 
      Toast.makeText(context, "in android.location.PROVIDERS_CHANGED", 
      Toast.LENGTH_SHORT).show(); 

     } 
    } 
} 
+0

Я уже реализована, что и это то же самое, возвращает местоположение обнулить первый раз после включения служб определения местоположения –

+0

вы используете метод canGetLocation() из gps tracker? –

+0

К сожалению нет. где я должен его использовать? –