Поведение Android 7 ConnectivityManager requestNetwork()

Я использую некоторый код для определения доступности мобильных данных и сотовой сети следующим образом:

final ConnectivityManager connection_manager =
                (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);

boolean mobileDataEnabled = false;

try {
    Class cmClass = Class.forName(connection_manager.getClass().getName());
    Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
    method.setAccessible(true); // Make the method callable
    // get the setting for "mobile data"
    mobileDataEnabled = (Boolean)method.invoke(connection_manager);
} catch (Exception e) {
}

if(mobileDataEnabled == true) {
    Log.d(TAG, "mobileDataEnabled == true");
} else {
    Log.d(TAG, "mobileDataEnabled == false");
}

NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);

connection_manager.requestNetwork(request.build(), new ConnectivityManager.NetworkCallback()
{
    @Override
    public void onAvailable(Network network)
    {Log.d(TAG, "requestNetwork onAvailable()");}

    @Override
        public void onCapabilitiesChanged (Network network, NetworkCapabilities networkCapabilities)
        {Log.d(TAG, "requestNetwork onCapabilitiesChanged()");}

    @Override
        public void onLinkPropertiesChanged (Network network, LinkProperties linkProperties)
        {Log.d(TAG, "requestNetwork onLinkPropertiesChanged()");}

    @Override
        public void onLosing (Network network, int maxMsToLive)
        {Log.d(TAG, "requestNetwork onLosing()");}

    @Override
        public void onLost (Network network)
        {Log.d(TAG, "requestNetwork onLost()");}
});

До сих пор это работало правильно, и обратный вызов onAvailable() запускается, если можно использовать мобильные данные. Тем не менее, я только что попробовал устройство Android 7, и хотя для mobileDataEnabled установлено значение true, что указывает на то, что сеть доступна, ни один из обратных вызовов requestNetwork() не запускается.

Кто-нибудь знает, изменилось ли что-нибудь в андроиде 7 в этой области? Я бы, по крайней мере, ожидал, что один из обратных вызовов будет вызван, но ничего не возвращается.


person Kebabman    schedule 05.04.2017    source источник


Ответы (1)


Я нашел ответ. Мне просто нужно было добавить NET_CAPABILITY_INTERNET в построитель запросов следующим образом:

request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
person Kebabman    schedule 05.04.2017