我希望我的应用程序检查“数据网络模式”或“移动数据”是否已启用,即使它当前未处于活动状态。换句话说,我需要检查该应用是否可能产生移动数据费用,即使手机当前通过WiFi连接也是如此。
通过谷歌搜索我发现以下代码检查“移动数据”是否“有效”。
ConnectivityManager cm =
(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
此代码存在的问题是,如果WiFi处于活动状态,即使移动数据已打开,也不会将其报告为活动数据。
可以修改代码以确定移动数据是否“已启用”并因此可能是活动的,而不是与此代码一样,无论它是否是当前活动的连接模式?
答案 0 :(得分:2)
试试这个
ConnectivityManager cm = (ConnectivityManager)
activity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
// if no network is available networkInfo will be null
// otherwise check if we are connected
if (networkInfo != null && networkInfo.isConnected()) {
return true;
}
return false;
答案 1 :(得分:2)
试试这个,它适用于大多数情况。
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnected();
if (!isConnected)
{
return false;
}
答案 2 :(得分:0)
请查看此代码:(我在Play商店发布的应用程序的代码)
private static boolean isAPNEnabled(Context paramContext) {
try {
NetworkInfo networkInfo = ((ConnectivityManager) paramContext.getSystemService("connectivity")).getActiveNetworkInfo();
return networkInfo.isConnected();
} catch (Exception e) {
return false;
}
}
答案 3 :(得分:0)
我不确定它是否可以在所有设备上运行,但它确实适用于我试过的一些设备:
private boolean isMobileDataEnabled(Context ctx) {
int mobileData = Settings.Secure.getInt(ctx.getContentResolver(), "mobile_data", 0);
return mobileData == 1;
}
即使我有一个有效的WiFi连接,它似乎也会返回正确的结果。