我正在开发一款Android应用程序,需要在没有互联网访问的WiFi网络上进行通信。问题在于,即使WiFi已连接,当wifi网络上没有互联网连接时,Android仍选择使用蜂窝移动数据。
我已经阅读了许多关于此问题的帖子,其中很多涉及到root设备,但对于生产应用程序来说这是不可能的(root设备不是一个选择)。其他解决方案(如下面的代码)建议使用bindProcessToNetwork()
,在我的Sony Z2上运行得很完美,但在其他设备上测试时则无法工作(所有设备都运行6.0.1)。
private void bindToNetwork() {
final ConnectivityManager connectivityManager = (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder = new NetworkRequest.Builder();
//set the transport type do WIFI
builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connectivityManager.bindProcessToNetwork(null);
if (barCodeData.getSsid().contains("ap-name")) {
connectivityManager.bindProcessToNetwork(network);
}
} else {
//This method was deprecated in API level 23
ConnectivityManager.setProcessDefaultNetwork(null);
if (barCodeData.getSsid().contains("ap-name")) {
ConnectivityManager.setProcessDefaultNetwork(network);
}
}
connectivityManager.unregisterNetworkCallback(this);
}
});
}
}