我正在构建一个需要通过WiFi网络进行通信的Android应用程序,该网络将无法访问任何Internet。问题是,即使连接WiFi时,Android在WiFi网络上不存在连接Internet时选择使用蜂窝/移动数据。
我已经阅读了许多有关此问题的帖子不是一个选项)。其他解决方案(例如我的代码Bellow)建议使用BindProcesstonetwork(),它在我的Sony Z2上完美工作,但在我已经测试过的其他设备上(全部运行6.0.1)
私人的空白Bindtonetwork(){最后ConnectivityManagerConnectivityManager=((ConnectivityManager)沟通。GetSystemservice((语境。连接_Service);NetworkRequest。建筑商建筑商;如果((建造。版本。SDK_INT> =建造。version_codes。棒糖){建筑商=新的NetworkRequest。建筑商();//设置运输类型do wifi建筑商。AddTransportType((网络范围。transport_wifi);ConnectivityManager。requestNetwork((建筑商。建造(),,新的ConnectivityManager。NetworkCallback(){@Override上市空白可见((网络网络){如果((建造。版本。SDK_INT> =建造。version_codes。m){ConnectivityManager。BindProcesstonetwork((无效的);如果((bar编编码。getsid()。包含((“屏幕空间”)){ConnectivityManager。BindProcesstonetwork((网络);}}别的{//此方法在API级别23中被弃用ConnectivityManager。setProcessDefaultNetwork((无效的);如果((bar编编码。getsid()。包含((“屏幕空间”)){ConnectivityManager。setProcessDefaultNetwork((网络);}}ConnectivityManager。UnregisternetworkCallback((这个);}});}}
您可以检查是否连接WiFi,然后继续向用户显示对话框,要求他连接到WiFi网络
由于现在在API-23中对方法NetworkInfo.isconnected()进行了弃用,因此这是一种检测Wi-Fi适配器是否打开并使用WiFimanager连接到访问点的方法:
私人的布尔CheckWifionand Connected(){Wifimanagerwifimgr=((Wifimanager)GetSystemservice((语境。wifi_service);如果((wifimgr。Iswifienabled()){// Wi-Fi适配器已打开wifiinfowifiinfo=wifimgr。getConnectionInfo();如果((wifiinfo。getnetworkid()==-1){返回错误的;//未连接到访问点}返回真的;//连接到访问点}别的{返回错误的;// Wi-Fi适配器关闭}}