Detectando conectividade de rede limitada no Android?

Há várias perguntas sobre como detectar a conectividade de rede no Android.https://stackoverflow.com/a/4239019/90236 fornece uma resposta muito detalhada ehttps://stackoverflow.com/a/8548926/90236 mostra métodos para identificar o tipo de rede a qual está conectado.

Detectamos conectividade de rede usando código semelhante às respostas como:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

Isso nos permite avisar um usuário se ele estiver off-line. No entanto, isso não nos ajuda a identificar se um usuário tem conectividade limitada. Existem condições de conectividade limitada que levaram os usuários a reclamar. Esses incluem:

Os usuários estão conectados a uma rede wifi doméstica, mas o modem a cabo ou o serviço de Internet não estão disponíveis.

Os usuários estão em um hotel ou coffee shop e se conectam com êxito a uma rede wifi, mas a rede exige que eles façam login ou concordem com os termos de serviço antes de receberem acesso total à rede.

Em ambas as situações, nosso teste isNetworkAvailable () retorna true. O sistema operacional nos diz que estamos conectados a uma rede. No entanto, o usuário não tem conectividade com a Internet utilizável.

Existe uma boa maneira de determinar se o usuário tem uma conexão de rede totalmente funcional?

Estou pensando em chamar um serviço da Web leve para verificar sua conectividade e avisar o usuário se o aplicativo não obtiver um retorno válido do serviço. Isso é um exagero? ou outros tiveram que recorrer a técnicas semelhantes?

questionAnswers(2)

yourAnswerToTheQuestion