是否可以强制 Android 应用程序仅使用移动无线电连接(3g/4g/等),不允许使用 WiFi?
我想我想使用 HIPRI 连接:(例如:打开 WIFI,使用 HIPRI 3G): http ://groups.google.com/group/android-developers/browse_thread/thread/d41f85505484d29b
是否可以强制 Android 应用程序仅使用移动无线电连接(3g/4g/等),不允许使用 WiFi?
我想我想使用 HIPRI 连接:(例如:打开 WIFI,使用 HIPRI 3G): http ://groups.google.com/group/android-developers/browse_thread/thread/d41f85505484d29b
我不相信您可以“强制”连接路径而不暂时明确关闭 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);
希望有帮助!
在 Android 2.2 中,您可以在使用 WiFi 的同时使用高优先级移动数据。“feature”参数的值为“enableHIPRI”,隐藏在Phone API中。
方法:http: //developer.android.com/reference/android/net/ConnectivityManager.html的ConnectivityManager.startUsingNetworkFeature(int networkType, String feature)
来源:http ://code.google.com/p/android/issues/detail?id=5885
您可以查看其他答案:https ://stackoverflow.com/a/4756630/327011
这不是一个好政策……如果真的需要,请使用它!
ConnectivityManager.setNetworkPreference() 即将被淘汰。但更重要的是,如果您在更改之前执行 getNetworkPreference(),它将返回 ConnectivityManager.TYPE_MOBILE。在那里设置它没有任何区别。至于 HIPRI 本身,它以非常奇怪的模式工作。首先,它允许连接到所有主机,而不仅仅是那些明确请求的主机。其次,当您使用 stopUsingFeature...() 调用将其关闭时,它不会被关闭并且仍然处于活动状态。第三,即使 wifi 可用,所有设备应用程序都开始使用它,这与文档中所说的相矛盾。
(我在这里回答了同样的问题)
您不能在每个应用程序的基础上明确强制通信通道(您可以通过请求使用首选模式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);
试着看看这个,它有很多信息,可能有你正在寻找的解决方案:如何在 Android 应用程序中使用 3G 连接而不是 Wi-fi?
它具有设置 HIPRI 移动连接并保持其运行的工作服务示例。AFAIK 这是在 android 中使用 wifi 和 3g 的唯一或多或少直接的方法。唯一的缺点是,此连接仅允许将数据传输到明确请求路由的服务器。这基本上意味着您无法路由到许多服务器,因为按名称查找主机以获取 IP 地址需要时间,并且为 10 台服务器执行此操作需要 30-60 秒,这使得它启动缓慢。因此,您应该确切地知道哪些服务器应该通过移动连接可用。