通知
清除所有

限制Android的互联网使用WiFi没有互联网接入

RSS

(@abhijith)
贵族成员
加入:1年前
帖子:1350
下午31/03/2021 40分

我正在构建一个android应用程序,需要通信通过WiFi网络,将没有任何互联网接入。问题是,即使连接了WiFi,在没有网络连接的情况下,android也会选择使用蜂窝/移动数据。

我读了很多关于这个问题的帖子,其中很多涉及到设备生根,但这是不可能的生产应用程序(生根设备是一个选项)。其他解决方案(如我下面的代码)建议使用bindProcessToNetwork(),它在我的索尼Z2上工作得很好,但在我测试过的其他设备上不能(都运行6.0.1)

私人无效bindToNetwork()最后ConnectivityManagerconnectivityManagerConnectivityManagermActivitygetSystemService上下文CONNECTIVITY_SERVICE);NetworkRequest构建器构建器如果构建版本SDK_INT>=构建VERSION_CODES棒棒糖构建器NetworkRequest构建器();//设置传输类型do WIFI构建器addTransportTypeNetworkCapabilitiesTRANSPORT_WIFI);connectivityManagerrequestNetwork构建器构建(),ConnectivityManagerNetworkCallback()@Override公共无效onAvailable网络网络如果构建版本SDK_INT>=构建VERSION_CODESconnectivityManagerbindProcessToNetwork);如果barCodeDatagetSsid().包含“screenspace”))connectivityManagerbindProcessToNetwork网络);其他的//该方法在API级别23中已弃用ConnectivityManagersetProcessDefaultNetwork);如果barCodeDatagetSsid().包含“screenspace”))ConnectivityManagersetProcessDefaultNetwork网络);connectivityManagerunregisterNetworkCallback);});

报价
(@ganesh)
贵族成员
加入:1年前
帖子:1362
31/03/2021 41点

你可以检查是否连接了wifi,然后继续显示一个对话框给用户,要求他连接到wifi网络

由于方法NetworkInfo.isConnected()在API-23中已弃用,这里有一个方法可以检测Wi-Fi适配器是否开启,并且也使用WifiManager连接到接入点:

私人布尔checkWifiOnAndConnected()WifiManagerwifiMgrWifiManagergetSystemService上下文WIFI_SERVICE);如果wifiMgrisWifiEnabled())// Wi-Fi适配器已开启WifiInfowifiInfowifiMgrgetConnectionInfo();如果wifiInfogetNetworkId()==-1){返回//没有连接到访问点返回真正的//连接到一个接入点其他的返回// Wi-Fi适配器关闭

回复报价
分享:
Baidu