我有一个应用程序,我希望能够使用它从远程查询中获取连接状态报告。
我想知道是否连接了 WiFi,以及是否通过移动网络启用了数据访问。
如果 WiFi 超出范围,我想知道我是否可以依赖移动网络。
问题是wifi连接时data enabled总是返回true,没有wifi连接时才能正常查询移动网络。
我看到的所有答案都建议轮询以查看当前连接是什么,但我想知道移动网络是否可用,如果我需要它,即使我目前可能通过 WiFi 连接。
有没有不轮询看是否连接就知道是否开启移动网络数据?
编辑
因此,当通过 WiFi 连接时,如果我转到设置并取消选择“启用数据”,然后在我的应用程序中执行以下操作:
boolean mob_avail =
conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isAvailable();
mob_avail 返回为“true”,但我已禁用移动网络数据,所以我希望它为“false”
如果我关闭 WiFi,则(正确地)没有连接,因为我已禁用移动网络数据。
那么当我通过WiFi连接时如何检查是否启用了移动网络数据?
更新
我查看了 ss1271 评论中建议的 getAllNetworkInfo()
我在以下 3 个条件下输出了返回的关于移动网络的信息
WiFi 关闭 - 移动数据开启
WiFi 开启 - 移动数据关闭
WiFi 开启 - 移动数据开启
得到以下结果:
With WiFi OFF:
mobile[HSUPA], state: CONNECTED/CONNECTED, reason: unknown, extra: internet, roaming: false, failover: false, isAvailable: true, featureId: -1, userDefault: false
With WiFi On / Mobile OFF
NetworkInfo: type: mobile[HSUPA], state: DISCONNECTED/DISCONNECTED, reason: connectionDisabled, extra: (none), roaming: false, failover: false, isAvailable: true, featureId: -1, userDefault: false
With WiFi On / Mobile On
NetworkInfo: type: mobile[HSPA], state: DISCONNECTED/DISCONNECTED, reason: connectionDisabled, extra: (none), roaming: false, failover: false, isAvailable: true, featureId: -1, userDefault: false
所以您可以看到 isAvailable 每次都返回 true,并且状态仅在 WiFi 生效时显示为 Disconnected。
澄清
我不查看我的手机当前是否已通过移动网络连接。我AM试图确定用户是否已启用/禁用通过移动网络访问数据。他们可以通过转到设置 -> 无线和网络设置 -> 移动网络设置 -> 启用数据来打开和关闭此功能
最佳答案
以下代码将告诉您“移动数据”是否启用,无论当前是否有移动数据连接或 wifi 是否启用/激活。 这个代码仅适用于 Android 2.3 (Gingerbread) 及更高版本。 实际上这段代码也适用于早期版本的 Android ;-)
boolean mobileDataEnabled = false; // Assume disabled
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
try {
Class cmClass = Class.forName(cm.getClass().getName());
Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
method.setAccessible(true); // Make the method callable
// get the setting for "mobile data"
mobileDataEnabled = (Boolean)method.invoke(cm);
} catch (Exception e) {
// Some problem accessible private API
// TODO do whatever error handling you want here
}
注意:您需要获得 android.permission.ACCESS_NETWORK_STATE
权限才能使用此代码。
关于android - 如何判断 'Mobile Network Data' 是启用还是禁用(即使通过 WiFi 连接)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806709/