正在开发的应用程序测量某个位置的互联网速度,但为了使其相关,它必须知道用户是否故意将移动互联网限制为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”似乎并不合适.
解决这个问题的正确方法是什么?
解决方法
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,则列出键值对可能会显示您需要的设置.如果遇到它请评论!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。