如何以编程方式知道是否在Android P上启用了MobileData?

时间:2018-11-15 16:40:06

标签: android android-9.0-pie

是否可以通过编程方式检查是否在Android P上启用了MobileData?

在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 :(得分:3)

使用以下课程

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

答案 1 :(得分:0)

使用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)
}

答案 2 :(得分:0)

   ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

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

以上代码将为您服务。

确定您的互联网连接类型

对于Wifi

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

对于手机

您可以参考@Chris Stillwell的答案。

相关问题