我可以在Android上同时打开Wi-Fi和蜂窝网络接口吗?
我正在开发一个应用程序,可以在手机上运行 将是专用Wi-Fi网络上的一个站点。电话将是一个 站点,而不是接入点,并且专用Wi-Fi网络不支持 路由到互联网。我的应用程序需要与 Internet上的服务器以及本地Wi-Fi网络上的设备, 因此,它需要同时在两个网络上建立连接。 我一直在想怎么做 我一直在尝试讨论中描述的技术 谷歌安卓开发者小组名为“Can” Android 2.X是否同时连接3G和Wifi数据网络?”,但 它工作不好。我发现,当我启用 通过呼叫的蜂窝网络我可以在Android上同时打开Wi-Fi和蜂窝网络接口吗?,android,android-wifi,Android,Android Wifi,我正在开发一个应用程序,可以在手机上运行 将是专用Wi-Fi网络上的一个站点。电话将是一个 站点,而不是接入点,并且专用Wi-Fi网络不支持 路由到互联网。我的应用程序需要与 Internet上的服务器以及本地Wi-Fi网络上的设备, 因此,它需要同时在两个网络上建立连接。 我一直在想怎么做 我一直在尝试讨论中描述的技术 谷歌安卓开发者小组名为“Can” Android 2.X是否同时连接3G和Wifi数据网络?”,但 它工作不好。我发现,当我启用 通过呼叫的蜂窝网络 ConnectivityM
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE\u MOBILE)
,
我在Wi-Fi网络上打开的所有插座都已关闭。我没有
我试过了,但我怀疑同样的事情也会发生在手机的插座上
当我切换回Wi-Fi时,手机网络
另一个问题是,,
这些呼叫在全局级别上运行,更改网络设置
对于整个手机,而不仅仅是应用程序。交换网络
像这样进行全局设置将干扰任何其他
正好在打电话。即使在我的应用程序退出之后,
手机将继续使用上次设置的网络配置运行
我正在寻找一种在两个蜂窝网络上都打开连接的方法
同时提供数据和Wi-Fi网络,且不会干扰
手机上运行的其他应用程序
如果你不能使用API调用,如果你想在较低的级别上下手,一些linux知识可能会有所帮助。 基本上,你需要做的是打开两个接口,并在3g接口上设置默认路由。 对于此类任务,您必须使用具有root权限的系统命令。
关闭套接字的原因可能是由于API调用而导致的接口上下波动。如果没有root访问权限,应用程序将不会产生太大影响 使用Android API,您最多只能打开WiFi,希望设备切换到WiFi,然后关闭WiFi,使设备切换到3G(如果有,APN是正确的,等等) 其他任何东西都不能保证起作用。例如,设置首选连接类型并不保证设备将切换到该类型 通常情况下,一旦WiFi可用,设备将同时开启3G和WiFi一段时间(3-5秒),然后关闭3G。一旦用户或您的应用程序关闭WiFi,并且设备尝试连接到互联网,它将在短时间后打开3G
从Android 2.3开始,你不能再禁用/启用3G了。一个用于破坏/恢复APN设置以启用/禁用3G,但从4.0开始,您无法以编程方式更改APN设置。我认为一次只能使用一种服务。您可以使用WiFi,也可以使用手机3G数据。两者不能同时工作。此线程提到了两种可能的解决方法
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI");
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI");
对于第二种方法,它特别声明它适用于Android2.2,不知道它是否也适用于实际版本。然而,据我所知,
enableHIPRI
或多或少是一个隐藏的网络设置,因此如果可能的话,我更喜欢第一种方法 3G和Wifi数据网络不能同时连接,但如果运营商的支持和android框架也发生变化,3G和Wifi可以同时连接。
现在,一些运营商已经具备了这一功能,但有些运营商却无法做到。目前在Android应用程序中不可能同时使用这两个网络,但您可以在PC上实现。
从WIFI路由器连接一个,从LAN或USB互联网棒连接一个。
所以,创建应用程序并在PC上使用。如果你不知道如何在PC上运行Android,那就用谷歌吧。如果我没有弄错的话,如果Wi-Fi和3G/4G都可用,Wi-Fi将优先 只有当Wi-Fi不可用时,它才会切换到3G/4G。当然,前提是两者同时打开 <> P>而不是使用私人Wi-Fi来限制您的选择,您可以考虑使用面向Internet的VPN,以便该设备将从3G/4G连接到VPN,而不是随后访问数据,如果安全性是您关注使用私人Wi-Fi的原因。
VPN客户端内置在Android中,也有第三方客户端可用。您可能需要研究ad-hoc wifi网络。 即使droid已经在使用wifi上网(但不使用ip协议栈),它也可以通过wifi连接到设备 不要将wifi(IEEE 802.11x)连接与internet(IP)连接混淆。 IP可以在wifi、移动、以太网、DSL、dailup或信鸽上运行,但一次只能运行一个网络 有关特设wifi网络的更多信息,请查看以下链接
请注意,许多运营商禁止多播(共享)其IP连接。很好。这其实很简单。您需要提交两个请求;一个用于具有
蜂窝
传输类型的网络,另一个请求具有无线
传输类型。然后,对于从这些请求返回的任何网络,您都可以根据需要使用它们(例如,仅使用从wifi
请求返回的网络处理内部资源)
以下是Wi-fi的一个示例:
final NetworkRequest requestForWifi =
new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build();
final ConnectivityManager connectivityManager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkCallback networkCallbackWifi = new NetworkCallback() {
@Override
void onAvailable(Network network) {
// Triggers when this network is available so you can bind to it.
}
@Override
void onLost(Network network) {
// Triggers when this network is lost.
}
};
connectivityManager.requestNetwork(requestForWifi, networkCallbackWifi);
为手机发送额外的请求,但使用和同时发送/收听