2015-10-19 1 views
0

tous j'essaie d'obtenir l'emplacement de l'appareil, mais il retourne toujours null. Je sais pour la première fois qu'il retournera null mais encore et encore il revient null. Voici mon code. Aidez-moi s'il vous plaît à résoudre ceci.L'emplacement est nul Android

public class LocationHelper implements LocationListener, 
    GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener { 


private static final String TAG = "LocationService"; 
private static final long INTERVAL = 1000 * 5; 
private static final long FASTEST_INTERVAL = 1000 * 3; 

Context context; 
LocationRequest mLocationRequest; 
GoogleApiClient mGoogleApiClient; 
Location mCurrentLocation; 
String mLastUpdateTime; 
LocationUpdateListener locationUpdateListener; 

public LocationHelper(Context context, LocationUpdateListener locationUpdateListener) { 
    this.context = context; 
    this.locationUpdateListener = locationUpdateListener; 

    if (!isGooglePlayServicesAvailable()) { 
    } else { 
     createLocationRequest(); 
     mGoogleApiClient = new GoogleApiClient.Builder(context) 
       .addApi(LocationServices.API) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 
     mGoogleApiClient.connect(); 
    } 
} 

/** 
* Create the location request 
*/ 
protected void createLocationRequest() { 
    mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(INTERVAL); 
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 
} 

private boolean isGooglePlayServicesAvailable() { 
    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context); 
    if (ConnectionResult.SUCCESS == status) { 
     return true; 
    }else if(status == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED){ 
     Log.d(TAG, "please udpate your google play service"); 
     Log.d(TAG, "please udpate your google play service"); 
     Log.d(TAG, "please udpate your google play service"); 
     return true; 
    }else { 
//   GooglePlayServicesUtil.getErrorDialog(status, getBaseContext(), 0).show(); 
     Log.d(TAG, "google play services is not available - ...............:"); 
     return false; 
    } 
} 

@Override 
public void onConnected(Bundle bundle) { 
    startLocationUpdates(); 
} 

private void startLocationUpdates() { 
    mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
    mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); 
    Log.d(TAG, "Location update started ..............: "); 
    fetchLocation(); 
    Log.d(TAG, "Location update started ..............: "); 
     Log.d(TAG, "Location update started ..............: "); 
} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
} 

@Override 
public void onLocationChanged(Location location) { 
    mCurrentLocation = location; 
    mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); 
    fetchLocation(); 
    Log.v("onLocationChanged","onLocationChanged"); 
    Log.v("onLocationChanged","onLocationChanged"); 
    Log.v("onLocationChanged","onLocationChanged"); 
} 

    //Get the location 
private void fetchLocation(){ 
    while (mCurrentLocation == null) { 
      try { 
       mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
       Log.d(TAG, "Location null "); 

       Thread.sleep(2000); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
      } 

     } 
     if (mCurrentLocation != null) { 
      locationUpdateListener.locationUpdate(mCurrentLocation); 
     } 
    } 
} 

Merci à l'avance

Répondre

1

Il semble que vous essayez d'obtenir la dernière position lorsque votre LocationClient connecté. Mais vous devez demander une mise à jour de l'emplacement pour recevoir votre position actuelle au lieu d'appeler getLastLocation(). Vous avez créé votre propre LocationRequest dans la méthode createLocationRequest() mais vous ne l'avez jamais utilisé dans le code.

code Exemple:

LocationServices.FusedLocationApi.requestLocationUpdates(yourGoogleApiClient, yourLocationRequest, yourLocationListener); 

Mise à jour:

Fin lorsque vous avez reçu nouvel emplacement yourLocationListener vous devez vous devez cesser de recevoir des mises à jour de l'emplacement:

private LocationListener mLocationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
     Log.v("onLocationChanged","onLocationChanged"); 

     if(mGoogleApiClient.isConnected()) { 
      LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, mLocationListener); 
      mGoogleApiClient.disconnect(); 
     } 

     //your code here  } 
}; 

Plus de détails vous pouvez trouver here.

J'espère que cela vous aidera.

+0

J'appelle 'createLocationRequest()' quand j'appelle cet appel d'une autre classe par ceci 'LocationHelper locationHelper = new LocationHelper (this, this);' – rup35h

+0

mais où vous appelez la méthode requestLocationUpdates? vous devez appeler cette méthode car dans certains cas votre dernier emplacement sera nul. Pour recevoir des mises à jour de localisation à coup sûr, vous devez appeler cette méthode –

+0

onConnected J'appelle – rup35h