公司要做无人机相关的 app ,app 需要连接无人机手柄发出来的 Wi-Fi 和无人机进行通讯,手柄发出来的 Wi-Fi 是个封闭的局域网,无法连接外网。
但是 app 使用的时候需要显示地图,地图数据下载需要有外网。请问如何能让手机和无人机之间的通讯使用 Wi-Fi 而下载地图数据又实用流量?
1
Befehishaber 2023-04-18 17:09:32 +08:00
?手机自带这功能吧,WiFi 美网得时候会自己用流量
|
2
shisico 2023-04-18 17:26:01 +08:00
应该是可以实现的。我用 70 迈的 App ,就可以通过 Wifi 直连行车记录仪的同时使用流量上网
|
3
rizigogogo OP @Befehishaber 请问是需要做特殊的设置吗?我这边测试 iOS/Android 好像都不行。🥵🥵🥵
|
4
lpt0 2023-04-18 17:29:32 +08:00 via Android 1
默认路由使用移动网络不就解决了
|
5
Befehishaber 2023-04-18 18:37:03 +08:00
@rizigogogo 我的华为 wifi 设置里有个 wlan+ 其他手机应该在 wifi 高级设置之类得菜单里吧 你好好找一下
|
6
29EtwXn6t5wgM3fD 2023-04-18 19:50:35 +08:00
ios 可以用系统调用 setsocketoption bindtodevice ,安卓提供了 java bindDevice 的方法。
|
7
ysc3839 2023-04-19 04:42:40 +08:00 via Android 1
Android 用 Network.bindSocket
https://developer.android.com/reference/android/net/Network#bindSocket(java.net.DatagramSocket) iOS 用 Network.framework 的 NWParameters.requiredInterfaceType https://developer.apple.com/documentation/network/nwparameters/2998706-requiredinterfacetype |
8
ChenSino 2023-04-19 09:04:02 +08:00
我的荣耀手机,自带的,不用设置
|
9
zhanlanhuizhang 2023-04-19 09:32:10 +08:00
看看手机系统是否支持,目前华为,荣耀是支持的。
|
10
afeiche 2023-04-19 09:53:27 +08:00
其实是有两种模式的,一种是在 wifi 不行的情况下,自动给你切换到流量,另外一种是同时使用 wifi 和流量,需要底层协议支持,之前华为手机有实现的,有个标准叫做 mp-tcp(Multipath TCP),需要客户端和服务器端都做改造的
|
11
jmliang 2023-04-19 10:49:38 +08:00
两年前做过这个需求, 产品是 wifi 摄像头图传, 需要连接设备发出的 wifi 后还能保持手机的外部网络连接; iOS 端最好处理, APP 什么都不用改, 只要让设备把 wifi 配置的路由, DNS 这些信息设置为空就行. Android 端当时一直没有找到解决方法, 后面发现有一款竞品的 APP 实现了这个功能, 是通过设置网络代理实现的, 具体的也不清楚, 最后是说安卓做不了, 客户也妥协了....
|
12
jmliang 2023-04-19 10:58:36 +08:00 1
刚刚没看清, 如果只是让自己的 APP 可以上外网的话可以试试这个
final ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkRequest.Builder builder = new NetworkRequest.Builder(); // 设置感兴趣的网络功能 builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); //强制使用蜂窝数据网络-移动数据 builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); NetworkRequest request = builder.build(); ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { Log.d(TAG, "onAvailable: network" + network); if (Build.VERSION.SDK_INT >= 23) { connectivityManager.bindProcessToNetwork(network); } else { ConnectivityManager.setProcessDefaultNetwork(network); } } }; connectivityManager.requestNetwork(request, callback); |
13
boser1u 2023-04-19 14:27:19 +08:00
小米 10 自带这个功能
|
15
jmliang 2023-07-06 10:46:22 +08:00
@Bananana 连接的 wifi 设备配置一下,子网掩码:255.255.255.0 。 路由器:正常为( 192.168.xxx.1 ),让设备那边把这个设为空,连接设备的 wifi 进设置可以看到
|
16
Prideeeeee 202 天前 1
@jmliang 我刚成功实现了,你还需要吗
|
17
jmliang 201 天前
@Prideeeeee 需要,非常感谢
|
18
Prideeeeee 201 天前 2
@jmliang 我周末抽空实现一套到 GitHub 发你
|
19
windstyle2 122 天前
@Prideeeeee 能分享下 github 链接吗
|