是否可以强制Android应用程序仅使用移动无线电连接(3g / 4g /等),不允许使用WiFi?
我想我想使用HIPRI连接:(例如:打开WIFI,使用HIPRI 3G): http://groups.google.com/group/android-developers/browse_thread/thread/d41f85505484d29b
答案 0 :(得分:10)
我不相信您可以“强制”连接路径而不会暂时关闭Wi-Fi无线电(不推荐)。但是,您可以尝试在希望发生这种情况的期间设置网络首选项:
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//Prefer mobile over wifi
cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
//Do your work
//Remove your preference
cm.setNetworkPreference(ConnectivityManager.DEFAULT_NETWORK_PREFERENCE);
希望有帮助!
答案 1 :(得分:4)
在Android 2.2中,您可以与WiFi同时使用高优先级移动数据。 “feature”参数的值为“enableHIPRI”,并隐藏在Phone API中。
方法: ConnectivityManager.startUsingNetworkFeature(int networkType,String feature)of http://developer.android.com/reference/android/net/ConnectivityManager.html
来源:http://code.google.com/p/android/issues/detail?id=5885
您可以查看其他答案:https://stackoverflow.com/a/4756630/327011
这不是一个好政策......如果真的需要使用它!
答案 2 :(得分:1)
ConnectivityManager.setNetworkPreference()即将废弃。但更重要的是,如果在更改之前执行getNetworkPreference(),它将返回ConnectivityManager.TYPE_MOBILE。在那里设置并没有任何区别。至于HIPRI本身,它在非常奇怪的模式下工作。首先,它允许连接到所有主机,而不仅仅是那些明确请求的主机。其次,当你使用stopUsingFeature ...()调用将其关闭时,它将不会被关闭并仍然处于活动状态。第三,即使有可用的wifi,所有设备应用程序也开始使用它,这与文档中的说法相矛盾。
答案 3 :(得分:0)
(我回答了同样的问题here)
您不能基于每个应用明确强制通信渠道(您可以通过ConnectivityManager.setNetworkPreference(...)
请求使用首选模式,但这不是“强制”)。
虽然这可能是非常糟糕的用户体验,但可以通知用户您的应用不允许使用WiFi,如果他们想要继续,则禁用他们的WiFi。为此,您需要ACCESS_WIFI_STATE
和CHANGE_WIFI_STATE
权限。代码看起来像这样:
manager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);
if(manager.isWifiEnabled()) {
manager.setWifiEnabled(false);
}
// and to be sure:
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
答案 4 :(得分:0)
试着看一下,它有很多信息,可能有你想要的解决方案:How to use 3G Connection in Android Application instead of Wi-fi?
它有工作服务示例,用于设置HIPRI移动连接并使其保持运行。 AFAIK这是在android中使用wifi和3g的唯一或多或少直接的方式。唯一的缺点是,此连接将仅允许向明确请求路由的服务器传输数据。这基本上意味着您无法路由到许多服务器,因为按名称查找主机获取IP地址需要时间,而为10台服务器执行此操作需要30-60秒,这使得它启动缓慢。所以你应该确切知道哪些服务器应该通过移动连接可用。