V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rizigogogo
V2EX  ›  程序员

android/ios 手机如何同时使用 Wi-Fi 和移动蜂窝网络?

  •  
  •   rizigogogo · 2023-04-18 17:04:11 +08:00 · 2660 次点击
    这是一个创建于 564 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司要做无人机相关的 app ,app 需要连接无人机手柄发出来的 Wi-Fi 和无人机进行通讯,手柄发出来的 Wi-Fi 是个封闭的局域网,无法连接外网。

    但是 app 使用的时候需要显示地图,地图数据下载需要有外网。请问如何能让手机和无人机之间的通讯使用 Wi-Fi 而下载地图数据又实用流量?

    19 条回复    2024-07-29 16:15:05 +08:00
    Befehishaber
        1
    Befehishaber  
       2023-04-18 17:09:32 +08:00
    ?手机自带这功能吧,WiFi 美网得时候会自己用流量
    shisico
        2
    shisico  
       2023-04-18 17:26:01 +08:00
    应该是可以实现的。我用 70 迈的 App ,就可以通过 Wifi 直连行车记录仪的同时使用流量上网
    rizigogogo
        3
    rizigogogo  
    OP
       2023-04-18 17:27:57 +08:00
    @Befehishaber 请问是需要做特殊的设置吗?我这边测试 iOS/Android 好像都不行。🥵🥵🥵
    lpt0
        4
    lpt0  
       2023-04-18 17:29:32 +08:00 via Android   ❤️ 1
    默认路由使用移动网络不就解决了
    Befehishaber
        5
    Befehishaber  
       2023-04-18 18:37:03 +08:00
    @rizigogogo 我的华为 wifi 设置里有个 wlan+ 其他手机应该在 wifi 高级设置之类得菜单里吧 你好好找一下
    29EtwXn6t5wgM3fD
        6
    29EtwXn6t5wgM3fD  
       2023-04-18 19:50:35 +08:00
    ios 可以用系统调用 setsocketoption bindtodevice ,安卓提供了 java bindDevice 的方法。
    ysc3839
        7
    ysc3839  
       2023-04-19 04:42:40 +08:00 via Android   ❤️ 1
    ChenSino
        8
    ChenSino  
       2023-04-19 09:04:02 +08:00
    我的荣耀手机,自带的,不用设置
    zhanlanhuizhang
        9
    zhanlanhuizhang  
       2023-04-19 09:32:10 +08:00
    看看手机系统是否支持,目前华为,荣耀是支持的。
    afeiche
        10
    afeiche  
       2023-04-19 09:53:27 +08:00
    其实是有两种模式的,一种是在 wifi 不行的情况下,自动给你切换到流量,另外一种是同时使用 wifi 和流量,需要底层协议支持,之前华为手机有实现的,有个标准叫做 mp-tcp(Multipath TCP),需要客户端和服务器端都做改造的
    jmliang
        11
    jmliang  
       2023-04-19 10:49:38 +08:00
    两年前做过这个需求, 产品是 wifi 摄像头图传, 需要连接设备发出的 wifi 后还能保持手机的外部网络连接; iOS 端最好处理, APP 什么都不用改, 只要让设备把 wifi 配置的路由, DNS 这些信息设置为空就行. Android 端当时一直没有找到解决方法, 后面发现有一款竞品的 APP 实现了这个功能, 是通过设置网络代理实现的, 具体的也不清楚, 最后是说安卓做不了, 客户也妥协了....
    jmliang
        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);
    boser1u
        13
    boser1u  
       2023-04-19 14:27:19 +08:00
    小米 10 自带这个功能
    Bananana
        14
    Bananana  
       2023-07-05 16:53:16 +08:00
    @jmliang 请问一下 iOS 端的处理,让设备把 wifi 配置的路由设置为空,路由设置为空具体是指啥?
    jmliang
        15
    jmliang  
       2023-07-06 10:46:22 +08:00
    @Bananana 连接的 wifi 设备配置一下,子网掩码:255.255.255.0 。 路由器:正常为( 192.168.xxx.1 ),让设备那边把这个设为空,连接设备的 wifi 进设置可以看到
    Prideeeeee
        16
    Prideeeeee  
       176 天前   ❤️ 1
    @jmliang 我刚成功实现了,你还需要吗
    jmliang
        17
    jmliang  
       175 天前
    @Prideeeeee 需要,非常感谢
    Prideeeeee
        18
    Prideeeeee  
       175 天前   ❤️ 2
    @jmliang 我周末抽空实现一套到 GitHub 发你
    windstyle2
        19
    windstyle2  
       96 天前
    @Prideeeeee 能分享下 github 链接吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1700 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:36 · PVG 00:36 · LAX 09:36 · JFK 12:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.