9
votes

EmplacementManager.isProviderEnabled (emplacementmanager.network_provider) n'est pas fiable, pourquoi?

Un utilisateur de mon application a rapporté que l'application indique que le réseau d'emplacement est désactivée même s'il l'a fait. Il m'a envoyé quelques coups d'écran et ils m'ont fait penser;

java.lang.IllegalArgumentException: provider=network
    at android.os.Parcel.readException(Parcel.java:1439)
    at android.os.Parcel.readException(Parcel.java:1389)
    at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:659)
    at android.location.LocationManager._requestLocationUpdates(LocationManager.java:690)
    at android.location.LocationManager.requestLocationUpdates(LocationManager.java:512)


6 commentaires

Je viens de le tester sur 4.1.2 (Galaxy S2) et 4.2.2 (Nexus 7), fonctionne bien sur les deux appareils. Est-ce juste cet utilisateur? Quel téléphone utilise-t-il?


Juste un commentaire, mais envisagez d'utiliser fusionné.


@Dumazy, j'ai vu au moins 2 téléphones ont ce problème. Et je suis réticent à montrer le nom du téléphone maintenant.


@Tomcat, les téléphones Samsung sont connus pour avoir des problèmes de localisation du fournisseur de réseau. Nommez le téléphone afin que vous puissiez vous aider.


S'il vous plaît voir la question modifiée.


@Siddharth, s'il vous plaît lisez mon commentaire à votre réponse.


4 Réponses :


2
votes

Pas directement une réponse à votre (s) question (s), mais consultez la nouvelle API de l'emplacement que Google lancé la semaine dernière. C'est vraiment facile à mettre en œuvre et il vérifiera le meilleur emplacement possible sans gaspiller la batterie. http://developer.android.com/google/play-services/location.html Et voici une session sur Google I / O à propos de cette nouvelle API et sur la manière de l'utiliser. http://www.youtube.com/watch?v=bte_ghuxUNGC

De cette façon, vous n'avez pas besoin de vous inquiéter de la vérification si le GPS est sur ou non et que cela ressemble à celui


1 commentaires

Cette réponse est hors du contexte de ma question.



0
votes

Gestionnaire d'emplacement n'est pas fiable sur certains téléphones. Vous remarquerez peut-être que si vous lancez Google Maps tout à coup votre application fonctionne. En effet, Google Maps a lancé un coup de pied à l'emplacement de l'emplacement. Ce qui signifie également qu'il existe un moyen programmatique de lancer ce mec vivant. J'ai donc utilisé

HomeScreen.getLocationManager().requestLocationUpdates(
    LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
        @Override
        public void onProviderEnabled(String provider) {
        }
        @Override
        public void onProviderDisabled(String provider) {
        }
        @Override
        public void onLocationChanged(final Location location) {
        }
    });


2 commentaires

Appeler demandeLocessionDates jette une exception. S'il vous plaît voir la question à nouveau. Je suppose que le problème que je suis confronté est différent, vous savez.


@TomCat Vous avez peut-être raison, mais je devrais également noter que, dans certains cas, la solution ci-dessus fonctionne comme un charme.



6
votes

Le soutien du développeur fourni par Sharp Corporation est excellent et répondit à ma question en moins de 48 heures.

C'est ce que j'en ai eu d'eux.

Il y a 2 conditions doit être remplie que EmplacementManager.isProviderEnabled (emplacementmanager.network_provider) renvoie true.

  1. Certains état interne sont prêts pour l'emplacement du réseau.
  2. Emplacement réseau est activé sur l'écran de réglage.

    La seconde est évidente. Mais le premier n'est pas. Ils ont dit comment simuler le premier est négatif. Vous pouvez confirmer le problème avec les étapes ci-dessous et exécuter mon application de test (voir ma question pour le lien à télécharger).

    • Ouvrez les paramètres de votre téléphone.
    • Appuyez sur Applications.
    • Appuyez sur tout l'onglet.
    • Trouver "Emplacement du réseau", appuyez sur.
    • appuyez sur "Désactiver".
    • Redémarrez votre téléphone.
    • exécution application test.

      Pour la raison, je ne peux pas comprendre que le téléphone de l'utilisateur n'a pas réussi à faire quelque chose lié à la première condition indiquée ci-dessus et présente le problème.

      conclusion:

      EmplacementManager.isProviderEnabled (emplacementmanager.network_provider) est fiable. Et être au courant, Secure.Location_Providers_allyed est moins fiable.


2 commentaires

Votre client va-t-il faire toutes ces étapes? Et avez-vous testé votre application sur d'autres téléphones? Samsung 2.3.6 et 4.0? À mon avis, vous avez besoin d'un moyen programmatique de déclencher la mise à jour. Pensez-y.


Un utilisateur a utilisé mon application de test et a prouvé quelle était la cause de cette question. Ma réponse peut ne pas avoir la bonne chose depuis que vous ne pouvez pas lire des conversations sur le forum de support utilisateur exécuté par Sharp Corporation. Ils ont clairement signalé la question et il est résolu.



4
votes

Le moyen moderne de vérifier les paramètres de l'emplacement des utilisateurs passe par emplacement_mode code> dans paramètres.secure code>

Par exemple si vous voulez simplement savoir si l'utilisateur les désactive Ou non, vous pouvez faire: p>

   public static boolean isLocationEnabled(Context context) {
       return getLocationMode(context) != Settings.Secure.LOCATION_MODE_OFF;
   }

   private static int getLocationMode(Context context) {
       return Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
   }


1 commentaires

Cela a également été obsolète. Pour vérifier l'état de localisation, utilisez EmplacementManager # IslocallocationEnabled (). Pour obtenir le statut d'un fournisseur d'emplacement, utilisez EmplacementManager # ISProviderenabled (String).