当Wi-Fi无法访问互联网时,Android Lollipop默认为移动数据?

 手机用户2602901285 发布于 2022-12-09 14:29

Android LollipopWi-Fi您连接到没有Internet访问权限时,似乎默认为Mobile Data .有人知道这是否在某处正式记录?

我们有一个应用程序需要连接到Wi-Fi没有Internet的机器.我们的客户现在报告Wi-Fi连接不再起作用,因为手机会自动切换到LTE.

我的理解是手机仍然保持Wi-Fi连接,但LTE除了提供对互联网的访问之外(棒棒糖 - 功能 - 聚光灯 - 机器人 - 现在 - 默认 - 移动 - 数据 - 当-wi-fi-has-no- internet-access-signal-icon-added-a-for-no-connection).

我对这个功能的理解是错误的吗?如果是这样,有没有办法强制使用没有互联网的Wi-Fi?我在开发人员文档中找不到任何相关内容.

任何帮助都非常感谢.

2 个回答
  • 默认情况下,Android 5.0将仅通过其检测到的具有活动互联网连接的网络发送网络请求,因此当它可能"连接"到wifi时,它不会通过网络发送任何数据.

    但是,Android 5.0 API指南讨论了新的多网络支持:

    Android 5.0提供了新的多网络API,可让您的应用动态扫描具有特定功能的可用网络,并建立与它们的连接.当您的应用需要专用网络(例如SUPL,MMS或运营商计费网络),或者您希望使用特定类型的传输协议发送数据时,此功能非常有用.

    这允许您为TRANSPORT_WIFI类型构建NetworkRequest,并在收到onAvailable()回调时通过Network.openConnection()将流量定向到它,如果必须通过wifi发生某些连接,即使wifi网络没有Internet访问权限.

    2022-12-11 02:07 回答
  • 为了扩展@ ianhanniballake的答案,我发现使用ConnectivityManager.setProcessDefaultNetwork()绑定网络可以防止漫游并允许完全的TCP访问.因此,在onAvailable()回调中,您可以将应用程序进程绑定到该网络,而不是打开与特定URL的连接.

    ConnectivityManager connection_manager = 
        (ConnectivityManager) activity.getApplication().getSystemService(Context.CONNECTIVITY_SERVICE);
    
    NetworkRequest.Builder request = new NetworkRequest.Builder();
    request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
    
    connection_manager.registerNetworkCallback(request.build(), new NetworkCallback() {
    
        @Override
        public void onAvailable(Network network) {
            ConnectivityManager.setProcessDefaultNetwork(network);
        }
    }
    

    从API级别23开始:请使用以下OnAvailable方法:

    @Override
    public void onAvailable(Network network) {
        connection_manager.bindProcessToNetwork(network);
    }
    

    2022-12-11 02:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有