Fused Location Provider n'obtient pas d'emplacement à moins que le GPS ne soit activé

J'ai donc mis en œuvre la nouvelle API de fournisseur de services fusionnés pour obtenir un emplacement de l'utilisateur, mais pour une raison quelconque, je ne peux pas obtenir d'emplacement à moins que le GPS ne soit activé. Pas toujours, les utilisateurs utiliseront leur GPS et je ne voudrais pas leur demander de faire tourner leur GPS chaque fois que vous chargez l'application. Comment puis-je dire à l'API de me donner un emplacement avec quel fournisseur il dispose?

Voici mon code:

  • Android drawText y compris l'enveloppement de texte
  • Pagination du texte dans Android
  • "DSR est activé; Ne pas envoyer DTR sur "erreur
  • Comment empêcher Android de retourner une réponse mise en cache à ma demande HTTP?
  • Android WebView -> Affichage WebArchive
  • Comment extraire ou décompresser un fichier .ab (fichier de sauvegarde Android)
  • public class FusedLocationService implements LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { public interface OnLocationChangedListener { public void OnLocationChanged(Location location); } private final String TAG = "SE8611"; private boolean mRequestingLocationUpdates = true; private OnLocationChangedListener mCallBack; Service locationService; private LocationRequest locationRequest; private GoogleApiClient googleApiClient; private Location mCurrentLocation; private FusedLocationProviderApi fusedLocationProviderApi = LocationServices.FusedLocationApi; public FusedLocationService(Service locationService, final long INTERVAL, final long FASTEST_INTERVAL) { Logger.log(TAG, "FusedLocationService called"); this.mCallBack = (OnLocationChangedListener)locationService; locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(INTERVAL); locationRequest.setFastestInterval(FASTEST_INTERVAL); this.locationService = locationService; googleApiClient = new GoogleApiClient.Builder(locationService) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); if (googleApiClient != null) { googleApiClient.connect(); } } @Override public void onConnected(Bundle connectionHint) { if(mRequestingLocationUpdates) { startLocationUpdates(); }else{ Logger.log(TAG, "Location updates are already running."); } } protected void startLocationUpdates() { this.fusedLocationProviderApi.requestLocationUpdates( googleApiClient, locationRequest, this); this.mRequestingLocationUpdates = false; } @Override public void onLocationChanged(Location mCurrentLocation) { Logger.log(TAG, "onLocationChanged called"); this.mCurrentLocation = mCurrentLocation; this.mCallBack.OnLocationChanged(this.mCurrentLocation); } public void startLocationUpdatesAfterResume(){ if (googleApiClient.isConnected() && !mRequestingLocationUpdates) { Logger.log(TAG, "startLocationUpdatesAfterResume called"); this.startLocationUpdates(); } } public void stopLocationUpdates() { Logger.log(TAG, "stopping Location Updates"); LocationServices.FusedLocationApi.removeLocationUpdates( googleApiClient, this); } public Location getLocation() { return this.mCurrentLocation; } @Override public void onConnectionSuspended(int i) { this.mRequestingLocationUpdates = true; } @Override public void onConnectionFailed(ConnectionResult connectionResult) { this.mRequestingLocationUpdates = true; } } 

  • Comment modifier modifier la couleur et la largeur du curseur de texte dans Android
  • CoordinatorLayout avec RecyclerView & CollapsingToolbarLayout
  • Passer le fichier avec l'intention, comment puis-je le récupérer
  • Type de support non pris en charge pour un client de restauration Android
  • Android Studio: l'installation de l'application a échoué
  • Android | Obtenir tous les éléments enfants d'un ViewGroup
  • 3 Solutions collect form web for “Fused Location Provider n'obtient pas d'emplacement à moins que le GPS ne soit activé”

    J'ai eu le même problème que vous, ce qui n'est pas du tout un problème. Android utilisé pour avoir un bouton GPS qui vous permet de contrôler directement, mais ils l'ont remplacé par un bouton d'emplacement qui fonctionne différemment. Pour obtenir n'importe quel type d'emplacement, vous devez l'activer. Comme vous, je pensais que le bouton Emplacement allume et éteint le GPS uniquement, mais ce n'est pas le cas. Vous pouvez contrôler le GPS en changeant le mode de localisation: 1. Haute précision (GPS, Wi-Fi et réseaux mobiles) 2. Économie d'énergie (Wi-Fi et réseaux mobiles) 3. GPS uniquement

    Je pense que j'ai trouvé la solution du problème.

    Si vous allez dans Paramètres -> Confidentialité et sécurité -> Emplacement, vous remarquerez que l'emplacement n'est pas seulement le GPS, mais en fait, il permet à l'utilisateur de décider quels fournisseurs peuvent être utilisés. Par exemple, vous pouvez définir que seul WiFi et Cellular devraient être utilisés pour obtenir des emplacements

    L'option Désactiver l'emplacement désactive tous les fournisseurs à la fois, pas seulement le GPS.

    Pour tester cette application pour les utilisateurs avec seulement WiFi, vous pouvez obtenir un emplacement – modifier le paramètre sur "Wifi + Cellular".

    Vous semblez utiliser LocationRequest.PRIORITY_HIGH_ACCURACY , qui préfère utiliser le GPS au-dessus et au-dessus d'autres méthodes. Vous voudrez peut-être utiliser PRIORITY_BALANCED_POWER_ACCURACY , qui utilisera les tours WiFi et cellulaires avant d'utiliser le GPS.

    En outre, puisque PRIORITY_BALANCED_POWER_ACCURACY est un niveau de précision «grossier», vous pouvez modifier l'autorisation de localisation dans votre manifeste de manière appropriée.

    La documentation de formation détaille plus d'informations sur les drapeaux de priorité, vous pourriez aussi vouloir l'examiner.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.