Vous pouvez déterminer si des fournisseurs sont disponibles avec LocationManager, mais cela peut-il être fait avec l’API de localisation des services Google Play?
Lorsque rien n'est activé, en fait "l'accès à mon emplacement" est désactivé, tous les appels d'API (connect (), requestLocationUpdates ()) aboutissent, mais vous n'obtenez jamais un onLocationChanged ().
Cela semble idiot de devoir utiliser LocationManager et LocationClient.
Je suppose que ce dont j'ai besoin, c'est d'un moyen de savoir que onLocationChanged (0 sera jamais sera appelé.
J'ai examiné la documentation et n'ai trouvé aucun moyen d'utiliser LocationClient pour détecter si les services de localisation sont activés. onConnected, onDisconnected et onConnectionFailed ne semblent pas être liés au fait que les services de localisation soient activés ou non.
Je suis en train de faire des demandes de localisation en utilisant LocationClient, mais en utilisant l'ancienne méthode locationManager.isProviderEnabled(String provider)
pour détecter si les services de localisation sont activés. C'est optimal pour moi, car même si LocationClient fournissait un moyen, il ne fait aucune distinction entre GPS et Réseau et j'aimerais vraiment pouvoir demander à l'utilisateur d'activer le GPS.
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
//GPS Provider disabled
return false;
}
Il existe désormais un moyen fiable de détecter si des mises à jour de localisation sont disponibles depuis Google Play Services 7.3.0:
Implémentez et enregistrez une LocationCallback
et remplacez onLocationAvailability()
ou appelez LocationServices.FusedLocationApi.getLocationAvailability()
pour récupérer l'état de disponibilité. Si c'est faux, alors vous savez que les mises à jour d'emplacement ne seront pas livrées sauf si quelque chose change dans la configuration du périphérique.
Cette méthode est en fait assez intelligente: par exemple, elle est capable de déterminer qu'aucune mise à jour d'emplacement ne sera livrée sur un périphérique WiFi uniquement si le WiFi est désactivé ou si le périphérique est en mode avion, même si le fournisseur d'emplacement réseau est toujours activé.
Services Google Play 7.0 introduit a Settins Api où vous pouvez demander les paramètres de localisation dont vous avez besoin, puis demander si sont activés ou demander à l'utilisateur de les activer.
Cela fonctionne pour moi. Testé sur une tablette Amazon par rapport à un Samsung s7
if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS) {
//Google Play services are available
} else {
//Google Play services are not available on this device
}