是否可以通过编程方式检查是否在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
有什么想法吗?
答案 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的答案。