Как программно узнать, включена ли MobileData на Android P? - PullRequest
0 голосов
/ 15 ноября 2018

Есть ли способ программно проверить, включена ли MobileData на Android P?

До P мы можем использовать getMobileDataEnabled() с отражением, подобным этому ответу.https://stackoverflow.com/a/12864897/3752013

Но после P методы отражения выдают исключение ... https://developer.android.com/about/versions/pie/restrictions-non-sdk-interfaces#results-of-keeping-non-sdk

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018
   ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null &&
                          activeNetwork.isConnectedOrConnecting();

Над кодом будет работать для вас.

Определите тип вашего интернет-соединения

Для Wi-Fi

boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;

Для мобильных

Вы можете обратиться @Chris Stillwellответить.

0 голосов
/ 03 декабря 2018

Используйте следующий класс

public class NetworkEventReceiver extends ConnectivityManager.NetworkCallback {
private final NetworkRequest networkRequest;
private final ConnectivityManager connectivityManager;
private final Context context;


public NetworkEventReceiver(Context context) {
    this.context = context;
    connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    networkRequest = new NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .build();
}

public void enable() {
    connectivityManager.registerNetworkCallback(networkRequest, this);
}

@Override
public void onAvailable(Network network) {
    executeActions(network);
    super.onAvailable(network);
}

@Override
public void onLost(Network network) {
    executeActions(network);
    super.onLost(network);
}

private void executeActions(Network network) {
    try {
        NetworkCapabilities info = connectivityManager.getNetworkCapabilities(network);

        if (info == null || info.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {

            updateStuff();

        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

Для включения этой услуги

NetworkEventReceiver monitor = new NetworkEventReceiver(this);
monitor.enable();
0 голосов
/ 15 ноября 2018

Использование NetworkCapabilities hasCapability()

Так что-то вроде этого:

public boolean hasMobileData() {
    ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
    return nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
}
...