我正在开发一款可以在手机上运行的应用程序 将成为私人Wi-Fi网络上的一个电台。手机将是一个 站,而不是接入点,私人Wi-Fi网络没有 路线到互联网。我的应用程序需要与之通信 Internet上的服务器以及本地Wi-Fi网络上的设备, 所以它需要同时在两个网络上建立连接。 我一直试图弄清楚如何做到这一点。
我一直在尝试讨论中描述的技术
Google Android开发者小组名为“可以
Android 2.X同时连接到3G和Wifi数据网络吗?“但是
它运作不佳。我发现的是,当我启用时
通过呼叫蜂窝网络
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE)
,
我在Wi-Fi网络上打开的任何插座都已关闭。我没有
尝试过,但我怀疑在套接字上会发生同样的事情
当我切换回Wi-Fi时,蜂窝网络。
另一个问题是, 这些呼叫在全球范围内运行,从而改变了网络设置 对于整个手机,而不仅仅是应用程序。切换网络 像这样设置全局会干扰任何其他应用程序 恰巧在手机上运行。即使我的申请退出后, 手机继续运行它设置的最后一个网络配置。
我正在寻找一种在蜂窝电话上打开连接的方法 数据和Wi-Fi网络同时进行,而不会干扰 手机上运行的其他应用程序。
1.有谁知道怎么做
这个?
2.有人知道这是否可能?
感谢您的帮助。
答案 0 :(得分:1)
这个帖子Android: Force data to be sent over radio vs WiFi提到了两种可能解决问题的方法。
只要您希望应用使用特定连接,请设置网络偏好设置:
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
启用高优先级移动数据连接:
connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI");
对于第二种方法,具体说明它适用于Android 2.2,不知道这是否适用于实际版本。但是据我所知,enableHIPRI
或多或少是一个隐藏的网络设置,所以如果可能的话我更喜欢第一种方法。
答案 1 :(得分:1)
这其实很简单。您需要提交两个请求;一个用于 cellular
传输类型的网络和一个 wifi
传输类型的附加请求。然后,对于从这些请求返回的任何网络,您都可以根据需要使用它们(例如,仅使用从 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);
提交额外的蜂窝请求,但改为使用 TRANSPORT_CELLULAR 和文件/收听这两个请求。由于您将有两个针对 Wi-Fi 和蜂窝网络的活动请求,因此 Android 会保持这两个网络供您使用。
答案 2 :(得分:0)
如果没有root访问权限,应用程序就不会有太大影响。
使用Android API,你最多可以做的就是打开WiFi,希望设备切换到它并关闭WiFi以使设备切换到3G(如果它在那里,APN是正确的等等)。
其他任何事情都不能保证有效。例如。设置首选连接类型并不能保证设备将切换到该类型。
通常的行为是,一旦WiFi可用,设备将同时启用3G和WiFi短时间(3-5秒),然后关闭3G。一旦用户或您的应用关闭WiFi,并且设备尝试连接到互联网,它将在一段时间后打开3G。
从Android 2.3开始,您无法再禁用/启用3G。一个用于破坏/恢复APN设置以启用/禁用3G,但从4.0开始,您无法以编程方式更改APN设置。
答案 3 :(得分:0)
我认为一次只能提供一项服务。您可以使用WiFi,也可以使用Cellular 3G Data。两者都不能同时工作。
答案 4 :(得分:0)
3G和Wifi数据网络不能同时连接,但如果运营商支持和Android框架也为运营商改变,则可以同时连接3G和Wifi。 现在一些运营商已经有了这个功能,但有些运营商却没有。
答案 5 :(得分:0)
目前在Android应用中无法同时使用两个网络,但您可以在PC中执行此操作 从WIFI路由器连接一个,从LAN或USB Internet Stick连接一个 所以创建APp并在PC上使用。如果您不知道如何在PC上运行Android而不是谷歌。
答案 6 :(得分:0)
如果我没弄错的话,如果Wi-Fi和3G / 4G都可用,Wi-Fi将优先考虑。
只有当Wi-Fi不可用时,它才会切换到3G / 4G。当然,这两者都是同时开启的。
不使用私有wifi从而限制您的选择,您可以考虑使用面向VPN的互联网,以便设备将从3G / 4G连接到VPN,然后如果安全是您关注使用私有wifi,则随后访问数据,
VPN客户端内置于Android中,还有第三方客户端。
希望它有所帮助!
答案 7 :(得分:0)
您可能希望研究ad-hoc wifi网络。 它通过wifi连接到设备,即使机器人已经使用wifi上网(虽然不使用ip栈)。
不要将wifi(IEEE 802.11x)连接与互联网(IP)连接混淆。 IP可以在wifi,移动,以太网,DSL,dailup或归巢鸽上运行,但一次只能运行一个网络。
有关ad-hoc wifi网络的更多信息,请查看以下链接。
https://code.google.com/p/android-wifi-tether/
请注意,许多运营商禁止多播(共享)其IP连接。好的。