LocationManager.isProviderEnabled (LocationManager.NETWORK_PROVIDER) não é confiável, por quê?

Um usuário do meu aplicativo informou que o aplicativo informa que o local da rede está desativado, mesmo que ele o tenha ativado. Ele me enviou alguns screenshots e eles me fizeram pensar;

LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)

não está funcionando corretamente. Seu telefone está rodando o Android 4.1.2 e primeiro penseiisto é a causa deste problema. Mas não foi o caso. Ele me enviou uma captura de tela dessa configuração também.

Então eu pesquisei e encontreiisto. A pergunta parece me ajudar, mas infelizmente a resposta não foi útil para este caso e o questionador não prosseguiu.

Meu aplicativo está relacionado à localização e usa o LocationManager.isProviderEnabled para saber se o GPS e a Rede estão ativados ou desativados. Nunca me disseram que meu aplicativo não está conhecendo adequadamente essas configurações até recentemente. Ele é o primeiro usuário que relatou o problema. Eu aprendi que há outro método para conhecer GPS e Rede para configurações de localização, vendo Secure.LOCATION_PROVIDERS_ALLOWED. Para ver como esse método funciona em seu telefone, eu escrevi um aplicativo simples e pedi para ele rodar. Este aplicativo faz uma tarefa simples e mostra texto na tela.

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";
}

Ele mandou de volta a tela novamente. Parece;

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

Este resultado não me fez feliz. Pode haver algumas possibilidades para isso.

Como outra pessoa questionada anteriormente, esta questão está presente em alguns telefones.Google quebrou isso com 4.1.2. isProviderEnabled não funciona nesta versão.Embora não documentado, a partir de 4.1.2, isProviderEnabled não funcionará como antes.Não, o Google mudou alguma coisa. Este é um bug para este telefone específico.

Agora minhas perguntas são;

O LocationManager.isProviderEnabled ainda é válido para o Android 4.1.2 e posterior?Ver Secure.LOCATION_PROVIDERS_ALLOWED tem alguns inconvenientes / pit holes (quando desisti usando LocationManager.isProviderEnabled?

Desde já, obrigado.

EDIT1:

Aqui Você pode fazer o download do aplicativo de teste do Google Play para tentar ou pedir para alguém tentar.

EDIT6:

Eu removi o aplicativo de teste, pois essa pergunta foi respondida.

EDIT2:

Eu lancei o meu aplicativo que verifica provedor de rede é utilizável vendo Secure.LOCATION_PROVIDERS_ALLOWED e tenho exceção em telefones limitados. Estes são o relatório da ACRA.

Algum telefone executando o sistema operacional 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)

Algum telefone executando o sistema operacional 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)

Eu nunca vi essas exceções até que eu mudei um método para verificar provedor de rede para localização é utilizável ou não. Então, eu acho que LocationManager.isProviderEnabled é seguro e ver Secure.LOCATION_PROVIDERS_ALLOWED é arriscado. Mas isso me colocará de volta à questão original. Por que LocationManager.isProviderEnabled (LocationManager.NETWORK_PROVIDER) retorna false (e não há realmente) quando o Secure.LOCATION_PROVIDERS_ALLOWED informa que existe. O Android OS é mal projetado? Ou eu acabei de ver problemas ligados apenas a telefones específicos (mas há pelo menos dois deles)?

EDIT3:

Eu atualizei o aplicativo de teste para mostrar GPS / Network provedor de localização parece realmente utilizável ou não, acessando com requestLocationUpdates ().

E eu divulgo o nome de 2 telefones.

1) SBM200SH, OS4.1.2, Softbank móvel, Sharp Corporation
2) HTX21 (INFOBAR A02), OS4.1.1, KDDI, HTC

EDIT4:

Eu encontrei o terceiro telefone.

3) SBM203SH, OS4.1.2, Softbank móvel, Sharp Corporation

EDIT5:

A Sharp Corporation está executando o espaço de discussão para desenvolvedores de dispositivos móveis. Eu postei o tópico apresentando a pergunta deste SO. Espero que alguém da Sharp Corporation tome medidas para isso. Eu vou manter isso atualizado.

questionAnswers(4)

yourAnswerToTheQuestion