Pau*_*son 22 mobile networking android
我正在开发一个移动应用程序(iOS和Android)来通过Wi-Fi控制设备.设备会创建无线网络(SoftAP),但不提供对Internet的访问.
在iOS上,我可以连接到设备并向其IP地址(192.168.70.1)发出请求,但所有其他请求都会回退到移动网络.这允许手机在通过Wi-Fi连接到设备时保持互联网连接.
在Android上,如果我连接到设备无线网络,互联网请求不会回退到移动连接,它们就会失败.
在我的Android应用中,我可以ConnectivityManager.requestRouteToHost用来强制我应用的请求使用移动网络.但是,其他应用程序发出的请求仍然使用设备wifi网络并失败.
我还试图用以下方法ConnectivityManager来改变网络偏好:
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE)
这会导致手机使用移动网络来处理来自所有应用程序的所有请求.Wi-Fi已禁用.似乎在Android的早期版本中,即使它不是"首选"网络,仍然可以使用Wi-Fi,但这似乎在KitKat中不起作用.这可能与Android 4.2中的更改有关:https://code.google.com/p/android/issues/detail? id = 73509"自4.2以来ConnectivityManager断开了不属于NetworkPreference的网络"
是否有解决方案允许Android应用程序将Wi-Fi用于特定IP地址,移动网络用于其他所有内容?也许这可以通过NDK完成?
Rob*_*erg 10
实际上你可以,但仅限于Lollipop(API 21).
从Android API 21文档:
Android 5.0 provides new multi-networking APIs that let your app dynamically scan for available
networks with specific capabilities, and establish a connection to them. This functionality is useful
when your app requires a specialized network, such as an SUPL, MMS, or carrier-billing network, or if
you want to send data using a particular type of transport protocol.
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用NetworkRequest.Builder类创建通过特定传输类型发送请求的NetworkRequest.
使用以下功能:
NetworkRequest.Builder addTransportType(int transportType)
Run Code Online (Sandbox Code Playgroud)
为您的请求设置传输类型(例如WIFI,ETHERNET或CELLULAR).
小智 3
Android 通常会删除不属于网络偏好的网络。您可以使用的解决方法是通过移动应用程序创建一个 AP 并让设备连接到它。这样,移动设备就可以保持互联网连接并与设备进行通信。
实施细节请参考以下链接:
https://github.com/opengarden/android-tether
https://code.google.com/p/android-wifi-tether/
| 归档时间: |
|
| 查看次数: |
3947 次 |
| 最近记录: |