2017-04-05 3 views
1

ich einige Code verwende zum Erfassen, ob die mobile Daten und das Mobilfunknetz verfügbar sind wie folgt:Android 7 ConnectivityManager requestNetwork() Verhalten

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

Bisher wurde dies richtig funktioniert und die onAvailable() Callback bekommt gefeuert, wenn die mobilen Daten verwendet werden können. Allerdings habe ich gerade auf einem Android 7-Gerät versucht und obwohl mobileDataEnabled auf true gesetzt ist, was darauf hinweist, dass das Netzwerk verfügbar ist, wird keiner der requestNetwork() -Rückrufe ausgelöst.

Weiß jemand, ob sich etwas in Android 7 in diesem Bereich geändert hat? Ich hätte zumindest erwartet, dass einer der Callbacks angerufen wird, aber nichts kommt zurück.

Antwort

3

fand ich die Antwort .. Ich brauche nur wie so den NET_CAPABILITY_INTERNET auf die Anfrage Builder hinzuzufügen:

request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); 
Verwandte Themen