android – 检测“仅使用2G网络”设置

前端之家收集整理的这篇文章主要介绍了android – 检测“仅使用2G网络”设置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法让 Android的移动网络设置的价值为“仅使用2G网络”?

正在开发的应用程序测量某个位置的互联网速度,但为了使其相关,它必须知道用户是否故意将移动互联网限制为2G.

我已经看过ConnectivityManager,但它只提供有关后台数据设置或所有网络的信息.通过它们进行迭代显示,尽管设置已启用,但HSPA和UMTS对isAvailable()返回true:

for (NetworkInfo netInfo : cm.getAllNetworkInfo()) {
    Log.i(TAG,netInfo.getSubtypeName() + ": " + netInfo.isAvailable());
}

我在这一切中发现的唯一提示是,当启用该设置时,netInfo.getReason()在HSPA和UMTS上返回“connectionDisabled”.问题是,当禁用该设置时,这些网络类型根本不一定出现在列表中.对于我来说,使用HSPA和UMTS上的字符串比较来表示“connectionDisabled”似乎并不合适.

解决这个问题的正确方法是什么?

解决方法

对于一小部分设备(特别是LG Optimus 2X Speed,LG-P990),答案似乎是:
int enabled = Settings.Secure.getInt(getContentResolver(),"preferred_network_mode",-1);
Log.d("MYAPP","2G only enabled: " + enabled);

“仅使用2G网络”设置指定为:

> 0表示禁用该设置
> 1表示设置已启用
> -1表示未设置设置(某些设备?)

我怎么发现这个?我使用以下方法从Settings.Secure收集了所有键/值对:

ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(Settings.Secure.CONTENT_URI,null,null);
if (cursor.moveToFirst()) {
    while (!cursor.isAfterLast()) {
        Log.d("MYAPP","cursor: "
                + cursor.getString(0) + ","
                + cursor.getString(1) + ","
                + cursor.getString(2));
        cursor.moveToNext();
    }
}

我比较了启用和禁用设置之间的结果,果然我得到了:

07-08 00:15:20.991: DEBUG/MYAPP(13813): cursor: 5154,preferred_network_mode,1

不要使用索引列(上例中的5154),因为我注意到它在切换设置之间发生了变化.

虽然这与some documentation for Settings.Secure I found online相关,但并非所有手机都尊重此值.

如果您的设备返回-1,则列出键值对可能会显示您需要的设置.如果遇到它请评论

猜你在找的Android相关文章