Android:强制数据通过无线与WiFi发送

Android:强制数据通过无线与WiFi发送,android,wifi,radio,packet,Android,Wifi,Radio,Packet,是否有可能强制Android应用程序只使用移动无线电连接(3g/4g/etc),不允许使用WiFi 我想我想使用HIPRI连接:(例如:打开WIFI,使用HIPRI 3G): 我认为,如果不明确暂时关闭Wi-Fi收音机(不推荐),您无法“强制”连接路径。但是,您可以在希望发生这种情况的时间段内尝试设置网络首选项: ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE)

是否有可能强制Android应用程序只使用移动无线电连接(3g/4g/etc),不允许使用WiFi

我想我想使用HIPRI连接:(例如:打开WIFI,使用HIPRI 3G):

我认为,如果不明确暂时关闭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);
希望有帮助

(我回答了同样的问题)

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

虽然这可能是糟糕的用户体验,但您可以通知用户您的应用程序不允许使用WiFi,然后如果用户想要继续,请禁用他们的WiFi。为此,您需要
ACCESS\u WIFI\u STATE
CHANGE\u WIFI\u STATE
权限。代码如下所示:

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

if(manager.isWifiEnabled()) {
    manager.setWifiEnabled(false);
}
// and to be sure:
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);

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

方法: 的ConnectionManager.StartSingNetworkFeature(int-networkType,字符串功能)

资料来源:

您可以检查另一个答案:


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

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

试着看看这个,它有很多信息,并且可能有您正在寻找的解决方案:


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

就我的测试所见。在ConnectivityService的源代码中,您可以看到设置此首选项会导致系统尝试断开连接的任何非首选网络,因此它正在执行我们预期的操作。这个例子有点陈旧。更新为使用适当的常量将首选项重置回默认值。这将触发连接。悲伤的事还是我需要更多的尝试?我需要使用TCP连接吗?因为系统会将答案发送到另一个套接字!我通过一个发送请求,通过另一个接收回复!Android似乎更改了显式绑定套接字的IP地址。讨厌那些讨厌UDP并将套接字绑定到0.0.0.0上的人。:-)谷歌,他们是糟糕的程序员,不是我的!为什么你听到他们而不是我?悲伤的时刻。Apolypse.setNetworkPreference()在API level 21 ConnectivityManager中已被弃用。setNetworkPreference()即将被淘汰。但更重要的是,如果在更改之前执行getNetworkPreference(),它将返回ConnectivityManager.TYPE\u MOBILE。在那里设置不会有任何区别。请注意,答案应该是搜索解决方案的终点(与另一个中途停留的引用相比,这些引用往往会随着时间的推移而过时)。请考虑在这里添加一个独立的概要,将链接作为参考。作为用户,当WiFi断开时,你希望手机只访问移动数据。如果这项工作正常,您可能会在用户不知情或无法阻止的情况下增加移动数据成本。不,不正确——作为一名用户,我希望我的SIP能够正常工作,而WiFi无法保证这一点,因此,我选择只使用3G。然而,根据,当连接WiFi时,我现在根本没有任何SIP。这是应用程序中的错误,还是应用程序中无法修复的问题?它不起作用。它会翻转,只允许那些在3G IP上打开并绑定的插座在另一个Wi-Fi IP上继续工作。谷歌那些疯狂的强盗们认为打破经典的伯克利插座很好。黑客们,看看你们能破解什么!;-)可能重复的