LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) ist nicht zuverlässig, warum?

Einen Benutzer meiner app berichtet, dass die app erzählt-Netzwerk für den Standort ab, auch er Tat es einzuschalten. Er schickte mir einige screenshots und Sie hat mich zum nachdenken;

LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)

nicht richtig funktioniert. Sein Telefon läuft Android 4.1.2 und ich dachte erst, dass diese ist die Ursache für dieses Problem. Aber es war nicht der Fall. Er schickte mir einen Screenshot, dass die Einstellung zu.

Dann habe ich gegoogelt und gefunden diese. Die Frage scheint mir zu helfen, aber leider die Antwort war nicht hilfreich für diesen Fall und Frager nicht weiter verfolgen.

Meine app ist in Bezug auf Lage und wurden mit LocationManager.isProviderEnabled zu wissen, GPS und Netzwerk für den Standort ein-oder ausschalten. Ich habe nie gesagt, meine app nicht richtig zu wissen, die Einstellungen, bis vor kurzem. Er ist der erste Benutzer, der berichtet der Ausgabe. Ich habe gelernt, es gibt eine andere Methode, um zu wissen, GPS und Netzwerk für Standort-Einstellungen, indem Sie sehen, Sichern.LOCATION_PROVIDERS_ALLOWED. Um zu sehen, wie diese Methode arbeiten auf seinem Handy, ich schrieb einfach, app zu und fragte ihn, zu laufen. Diese app funktioniert einfach und zeigt text auf dem Bildschirm.

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
    string = "GPS=on\n";
}
else
{
    string = "GPS=off\n";
}
if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
{
    string += "Network=on\n";
}
else
{
    string += "Network=off\n";
}
String status = android.provider.Settings.Secure.getString(getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED);
if(status.contains("gps"))
{
    string += "GPS=on\n";
}
else
{
    string += "GPS=off\n";
}
if(status.contains("network"))
{
    string += "Network=on\n";
}
else
{
    string += "Network=off\n";
}

Er zurück geschickt Screenshot wieder. Es sieht;

GPS=on
Network=off
GPS=on
Network=on

Dieses Ergebnis hat mich nicht glücklich gemacht. Könnte es einige Möglichkeiten.

  • Als andere befragte person vor, dieses Problem wurde es auf einigen Telefonen.
  • Google brach diese mit 4.1.2. isProviderEnabled funktioniert nicht auf diese version.
  • Obwohl nicht dokumentiert ist, ab 4.1.2, isProviderEnabled nicht so funktionieren, wie vorher auch.
  • Nein, Google nichts geändert hat. Dies ist ein Fehler, der für diesen speziellen Telefon.

Nun meine Fragen sind;

  1. Ist LocationManager.isProviderEnabled noch gültig für die Android 4.1.2 und höher?
  2. Nicht sehen zu Sichern.LOCATION_PROVIDERS_ALLOWED haben einige Nachteile/pit-Löchern (wenn ich es aufgab, mit LocationManager.isProviderEnabled?

Vielen Dank im Voraus.

EDIT1:

Hier Sie können download-test-app von Google Spielen, um zu versuchen, oder Fragen Sie jemanden, um zu versuchen.

EDIT6:

Ich entfernte test-app, da diese Frage beantwortet ist.

EDIT2:

Ich veröffentlichte meine app, die prüft Netzwerk-Anbieter nutzbar ist, durch den Anblick Sicher.LOCATION_PROVIDERS_ALLOWED und bekam Ausnahme auf Handys beschränkt.
Diese sind ACRA ' s Bericht.

Einige Handy mit OS 4.1.1.

java.lang.IllegalArgumentException: requested provider network doesn't exisit
    at android.os.Parcel.readException(Parcel.java:1434)
    at android.os.Parcel.readException(Parcel.java:1384)
    at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:675)
    at android.location.LocationManager._requestLocationUpdates(LocationManager.java:686)
    at android.location.LocationManager.requestLocationUpdates(LocationManager.java:508)

Einige Telefon-OS 4.1.2.

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)

Habe ich noch nie gesehen die Ausnahmen, bis ich verändert eine Methode, um zu überprüfen, Netzwerk-provider für location brauchbar ist oder nicht. Also ich denke LocationManager.isProviderEnabled ist sicher und sehen Sicher.LOCATION_PROVIDERS_ALLOWED ist riskant. Aber das wird mich wieder zum ursprünglichen Problem. Warum LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) gibt false zurück (und es ist nicht wirklich), wenn man die Sicherheit.LOCATION_PROVIDERS_ALLOWED sagt, es IST. Ist Android OS schlecht konzipiert? Oder habe ich nur sehen, Fragen gebunden, die nur auf bestimmte (aber es sind zumindest 2 von Ihnen) Handys?

EDIT3:

Ich aktualisierte test-app, um zu zeigen, GPS/Network location provider scheint wirklich brauchbar ist oder nicht, zugreifen mit requestLocationUpdates().

Und ichs 2 Handys Namen.

1) SBM200SH, OS4.1.2, Softbank mobile, Sharp Corporation

2) HTX21 (INFOBAR A02), OS4.1.1, KDDI HTC

EDIT4:

Fand ich 3. Telefon.

3) SBM203SH, OS4.1.2, Softbank mobile, Sharp Corporation

EDIT5:

Sharp Corporation läuft die Diskussion Raum für mobile-Entwickler. Ich geschrieben Thema zu präsentieren, SO die Frage. Ich hoffe, dass jemand bei der Sharp Corporation, führt die entsprechende Aktion für diesen. Ich halte dies aktualisiert.

  • Ich habe es gerade getestet auf beiden 4.1.2 (galaxy s2) und 4.2.2 (nexus 7), funktioniert einwandfrei auf beiden Geräten. Ist es nur dieser Benutzer? Welches Telefon nutzt er?
  • Einfach ein Kommentar schreiben, aber Bedenken Sie zu verwenden verschmolzen.
  • Sah ich mindestens 2 Handys haben dieses Problem. Und ich bin relactant anzeigen Telefon name jetzt.
  • Samsung-Handys sind bekannt für die Netzbetreiber Ort Probleme. Nennen Sie das Telefon so, dass u kann hier geholfen werden.
  • Finden Sie bearbeiteten Frage.
  • Bitte Lesen Sie meinen Kommentar zu Ihrer Antwort.

InformationsquelleAutor Tomcat | 2013-05-25
Schreibe einen Kommentar