【问题标题】:How to know programmatically whether MobileData is enabled on Android P?如何以编程方式知道 Android P 上是否启用了 MobileData?
【发布时间】:2018-11-15 16:40:06
【问题描述】:
【问题讨论】:
标签:
android
android-9.0-pie
【解决方案1】:
使用下面的类
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();
【解决方案2】:
使用NetworkCapabilitieshasCapability()
所以是这样的:
public boolean hasMobileData() {
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
return nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
}
【解决方案3】:
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
上面的代码对你有用。
确定您的互联网连接类型
无线上网
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
手机版
你可以参考@Chris Stillwell 的回答。