14

是否可以强制 Android 应用程序仅使用移动无线电连接(3g/4g/等),不允许使用 WiFi?

我想我想使用 HIPRI 连接:(例如:打开 WIFI,使用 HIPRI 3G): http ://groups.google.com/group/android-developers/browse_thread/thread/d41f85505484d29b

4

5 回答 5

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);

希望有帮助!

于 2011-05-04T13:05:44.470 回答
4

在 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

这不是一个好政策……如果真的需要,请使用它!

于 2012-03-20T17:30:17.670 回答
1

ConnectivityManager.setNetworkPreference() 即将被淘汰。但更重要的是,如果您在更改之前执行 getNetworkPreference(),它将返回 ConnectivityManager.TYPE_MOBILE。在那里设置它没有任何区别。至于 HIPRI 本身,它以非常奇怪的模式工作。首先,它允许连接到所有主机,而不仅仅是那些明确请求的主机。其次,当您使用 stopUsingFeature...() 调用将其关闭时,它不会被关闭并且仍然处于活动状态。第三,即使 wifi 可用,所有设备应用程序都开始使用它,这与文档中所说的相矛盾。

于 2013-11-26T15:43:39.187 回答
0

(我在这里回答了同样的问题)

您不能在每个应用程序的基础上明确强制通信通道(您可以通过请求使用首选模式ConnectivityManager.setNetworkPreference(...),但这不是“强制”)。

虽然这可能是糟糕的用户体验,但您可以通知用户您的应用程序不允许使用 WiFi,然后如果他们想继续,请禁用他们的 WiFi。为此,您需要ACCESS_WIFI_STATECHANGE_WIFI_STATE权限。代码看起来像这样:

manager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);

if(manager.isWifiEnabled()) {
    manager.setWifiEnabled(false);
}
// and to be sure:
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
于 2012-01-31T20:24:43.147 回答
0

试着看看这个,它有很多信息,可能有你正在寻找的解决方案:如何在 Android 应用程序中使用 3G 连接而不是 Wi-fi?

它具有设置 HIPRI 移动连接并保持其运行的工作服务示例。AFAIK 这是在 android 中使用 wifi 和 3g 的唯一或多或少直接的方法。唯一的缺点是,此连接仅允许将数据传输到明确请求路由的服务器。这基本上意味着您无法路由到许多服务器,因为按名称查找主机以获取 IP 地址需要时间,并且为 10 台服务器执行此操作需要 30-60 秒,这使得它启动缓慢。因此,您应该确切地知道哪些服务器应该通过移动连接可用。

于 2013-12-22T09:46:10.573 回答