Android:强制通过蜂窝网络与 WiFi 发送数据

问题描述 投票:0回答:5

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

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

android wifi cellular-network
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);

希望有帮助!


4
投票

在Android 2.2中,您可以在使用WiFi的同时使用高优先级移动数据。 “feature”参数的值为“enableHIPRI”,并且隐藏在电话 API 中。

方法: ConnectivityManager.startUsingNetworkFeature(int networkType, String feature) 的 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

这不是一个好政策...如果确实需要就使用它!


1
投票

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


0
投票

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

您无法在每个应用程序的基础上显式强制通信通道(您可以通过

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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.