Un utente della mia app ha segnalato che l'app comunica alla rete che la posizione non è attiva anche se l'ha accesa. Mi ha mandato poche schermate e mi hanno fatto riflettere;LocationManager.isProviderEnabled (LocationManager.NETWORK_PROVIDER) non è affidabile, perché?
LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
non funziona correttamente. Il suo telefono ha Android 4.1.2 e per prima cosa ho pensato che lo this sia la causa di questo problema. Ma non era il caso. Mi ha mandato anche una schermata di quell'ambientazione.
Quindi ho cercato su Google e ho trovato this. La domanda sembra aiutarmi, ma sfortunatamente la risposta non è stata utile per questo caso e l'interrogante non ha proseguito.
La mia app è correlata all'ubicazione e utilizza LocationManager.isProviderEnabled per sapere che GPS e rete sono attivati o disattivati. Non mi è mai stato detto che la mia app non conosca correttamente tali impostazioni fino a poco tempo fa. È il primo utente a segnalare il problema. Ho imparato che esiste un altro metodo per conoscere il GPS e la rete per le impostazioni di posizione, visualizzando Secure.LOCATION_PROVIDERS_ALLOWED. Per vedere come funziona questo metodo sul suo telefono, ho scritto una semplice app e gli ho chiesto di correre. Questa app svolge un'attività semplice e mostra il testo sullo schermo.
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";
}
Ha inviato di nuovo la schermata. Sembra;
Questo risultato non mi ha reso felice. Ci potrebbero essere alcune possibilità per questo.
- Come altre persone interrogate prima, questo problema è stato presente su alcuni telefoni.
- Google ha infranto questo con 4.1.2. isProviderEnabled non funziona su questa versione.
- Anche se non è documentato, a partire da 4.1.2, isProviderEnabled non funzionerà come prima.
- No, Google ha cambiato nulla. Questo è un bug per questo particolare telefono.
Ora le mie domande sono;
- Is LocationManager.isProviderEnabled è ancora valido per Android 4.1.2 e versioni successive?
- Does vedendo Secure.LOCATION_PROVIDERS_ALLOWED avere degli svantaggi/fori pit (quando ho rinunciato usando LocationManager.isProviderEnabled
Grazie in anticipo
Edit1:?.
Here è possibile scaricare prova l'app da Google Play per provare o chiedere a qualcuno di provare.
EDIT6:
Ho rimosso l'app di test da quando si risponde a questa domanda.
EDIT2:
ho rilasciato la mia app che controlla provider di rete è utilizzabile da vedere Secure.LOCATION_PROVIDERS_ALLOWED e ottenuto eccezione sui telefoni limitato. Questi sono i rapporti dell'ACRA.
Alcuni telefoni con sistema operativo 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)
Alcuni telefoni con sistema operativo 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)
non ho mai visto tali eccezioni fino a quando ho cambiato un metodo per controllare fornitore di rete per la posizione è utilizzabile o meno. Quindi penso che LocationManager.isProviderEnabled sia sicuro e vedere Secure.LOCATION_PROVIDERS_ALLOWED sia rischioso. Ma questo mi riporterà al problema originale. Perché LocationManager.isProviderEnabled (LocationManager.NETWORK_PROVIDER) restituisce false (e in realtà non lo è) quando Secure.LOCATION_PROVIDERS_ALLOWED indica che IS è. Il sistema operativo Android è progettato male? O ho appena visto problemi legati solo a telefoni specifici (ma ce ne sono almeno 2)?
Edit3:
ho aggiornato applicazione di test per mostrare/Rete GPS fornitore di posizione sembra realmente utilizzabile o meno accedendo con requestLocationUpdates().
E divulgo il nome di 2 telefoni.
1) SBM200SH, OS4.1.2, Softbank mobili, Sharp Corporation
2) HTX21 (Infobar A02), OS4.1.1, KDDI, HTC
edit4:
ho trovato 3 ° di telefono .
3) SBM203SH, OS4.1.2, Softbank mobili, Sharp Corporation
EDIT5:
Sharp Corporation è in esecuzione spazio di discussione per gli sviluppatori mobili. Ho postato l'argomento presentando la domanda di questo SO. Spero che qualcuno della Sharp Corporation agisca per questo. Terrò questo aggiornato.
L'ho appena testato su entrambi 4.1.2 (galaxy s2) e 4.2.2 (nexus 7), funziona bene su entrambi i dispositivi. È solo questo utente? Che telefono usa? – dumazy
Solo un commento, ma si consideri di usare fuso. – cremy
@dumazy, ho visto che almeno 2 telefoni hanno questo problema. E sono riluttante a mostrare il nome del telefono ora. – Tomcat