Pau*_*sma 7 android connectivity
有没有办法让Android的移动网络设置的价值为"仅使用2G网络"?
正在开发的应用程序测量某个位置的互联网速度,但为了使其相关,它必须知道用户是否故意将移动互联网限制为2G.
我已经看过ConnectivityManager,但它只提供有关后台数据设置或所有网络的信息.通过他们迭代表明,尽管已启用该设置,HSPA和UMTS返回true为isAvailable():
for (NetworkInfo netInfo : cm.getAllNetworkInfo()) {
Log.i(TAG, netInfo.getSubtypeName() + ": " + netInfo.isAvailable());
}
Run Code Online (Sandbox Code Playgroud)
我在这一切中发现的唯一提示是,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);
Run Code Online (Sandbox Code Playgroud)
"仅使用2G网络"设置指定为:
0 表示该设置已禁用1 表示该设置已启用-1 表示未设置设置(某些设备?)我怎么发现这个?我Settings.Secure使用以下内容收集了所有键/值对:
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(Settings.Secure.CONTENT_URI, null, null, null, null);
if (cursor.moveToFirst()) {
while (!cursor.isAfterLast()) {
Log.d("MYAPP", "cursor: "
+ cursor.getString(0) + ", "
+ cursor.getString(1) + ", "
+ cursor.getString(2));
cursor.moveToNext();
}
}
Run Code Online (Sandbox Code Playgroud)
我比较了启用和禁用设置之间的结果,果然我得到了:
07-08 00:15:20.991:DEBUG/MYAPP(13813):cursor:5154,preferred_network_mode,1
不要使用索引列(上例中的5154),因为我注意到它在切换设置之间发生了变化.
虽然这与我在网上找到的Settings.Secure的一些文档相关,但所有手机都不尊重这个值.
如果您的设备返回-1,可能列出键值对将显示您需要的设置.如果你遇到它请评论!
| 归档时间: |
|
| 查看次数: |
5404 次 |
| 最近记录: |