J'essaie simplement de créer une application "tutorielle" simple pour obtenir l'emplacement de mon téléphone (pour apprendre à l'utiliser plus tard dans une autre application), mais je ne vais nulle part.
Tutoriel du développeur Android: Tout d'abord, j'ai suivi le tutoriel sur le site de développement d'Android (developer.Android.com/training/location/receive-location-updates.html).
Comme indiqué, j’ai utilisé un Location, LocationClient et LocationRequest pour les initialiser (et les configurer) dans onCreate. LocationClient est connecté et déconnecté dans onStart et onStop.
Je demande une mise à jour de l'emplacement après ma connexion (dans onConnected). Je vérifie que GooglePlayServices est disponible avant de passer cet appel et je ne reçois toujours aucune mise à jour dans "onLocationChanged".
GoogleApiClient: J'ai remarqué que LocationClient est obsolète et que LocationServices est préférable (developer.Android.com/reference/com/google/Android/gms/location/LocationClient.html).
Comme indiqué ici: https://developer.Android.com/reference/com/google/Android/gms/location/FusedLocationProviderApi.html , j'utilise GoogleApiClient et le configure sur LocationServices (également https://stackoverflow.com/a/25013850/3802589 ). Alors, j'ai tout configuré pour l'utiliser, mais je ne reçois toujours aucune mise à jour sur l'emplacement.
onLocationChanged devrait imprimer s'il y a une réponse. J'ai également mis un bouton qui imprime l'emplacement ou «rien».
J'ai vérifié avec Google Maps si j'avais peut-être quelque chose, mais ça fonctionne très bien.
build.gradle
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.Android.gms:play-services:5.0.77'
compile "com.Android.support:support-v4:20.0.+"
}
Manifeste
...
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"/>
...
<meta-data Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
...
Code
public class MyActivity extends Activity implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener {
private GoogleApiClient mLocationClient;
private Location mCurrentLocation;
LocationRequest mLocationRequest;
...
/* Constant fields - request interval */
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
mLocationClient = new GoogleApiClient.Builder(getApplicationContext())
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
}
@Override
protected void onStart() {
super.onStart();
mLocationClient.connect();
}
@Override
protected void onStop() {
super.onStop();
LocationServices.FusedLocationApi.removeLocationUpdates(mLocationClient, this);
mLocationClient.disconnect();
}
public void onClick(View view) {
if (mCurrentLocation != null) {
Log.i("Location", mCurrentLocation.toString());
} else {
Log.i("Location", "nothing");
}
}
@Override
public void onLocationChanged(Location location) {
Log.d("Location Update", "CHANGED");
mCurrentLocation = location;
}
@Override
public void onConnected(Bundle bundle) {
// Display the connection status
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
if(servicesConnected()) {
LocationServices.FusedLocationApi.requestLocationUpdates(mLocationClient, mLocationRequest, this);
}
}
@Override
public void onConnectionSuspended(int i) {
Toast.makeText(this, "Disconnected. Please re-connect.",
Toast.LENGTH_SHORT).show();
}
logcat
8948-8948/example.Android.com.test D/Location Updates﹕ Google Play services is available.
8948-8948/example.Android.com.test I/Location﹕ nothing
J'ai l'impression que j'oublie peut-être quelque chose de très simple ... mais je ne le vois pas et j'ai passé trop de temps à essayer d'obtenir un endroit simple ...
Je pourrais peut-être simplement utiliser l'API Android.location mais ... Cela me gêne que ce soit si difficile (soi-disant plus facile).
L'erreur était seulement que le wifi n'était pas allumé ... Et je n'ai pas réalisé.
En ce qui concerne ce que GregM a dit, si je ne me trompe pas, c'est l'ancienne API (la plupart d'entre elles est obsolète maintenant) et comme indiqué sur le site du développeur ( https://developer.Android.com/google/auth/api-client .html ) vous devez utiliser GoogleApiClient comme indiqué dans ma question initiale (et même pour les rappels).
Les trois rappels:
public void onConnectionFailed(ConnectionResult arg0){}
public void onConnected(Bundle bundle){}
public void onConnectionSuspended(int arg0){}
doit être mis en œuvre. Cependant, je ne vois pas onConnectionFailed
être remplacé. Le compilateur aurait dû donner une erreur dans ce cas. Il existe deux implémentations LocationListener
, une pour LocationListener
et l'autre gms.location.LocationListener
. Vous voudrez peut-être vérifier si vous utilisez la version de gms.
J'espère que Google mettra à jour leur exemple de code de formation pour le nouveau modèle client et évitera toute confusion supplémentaire.