我有一个应用程序必须通过Wi-Fi连接到某些设备并向其发送一些数据(本地地址192.168.4.1
)。改装通过移动服务连接,因为Wi-Fi网络没有互联网连接
我为此有些控制器类:
public class Controller {
private CallbackListener mListener;
private RestApiManager mApiManager;
public Controller(CallbackListener listener) {
mApiManager = new RestApiManager();
mListener = listener;
}
public void sendSomeData(String data) {
SomeRestApi api = mApiManager.getSomeApi();
api.sendDataToDevice(data, new Callback<String>() {
@Override
public void success(String s, Response response) {
mListener.onSuccess(s);
}
@Override
public void failure(RetrofitError error) {
mListener.onFailure(error);
}
});
}
public interface CallbackListener {
void onSuccess(String response);
void onFailure(RetrofitError error);
}
如果我的智能手机(版本的Android M 6.0.1)仅连接到无线网络和移动服务是关闭所有去好:数据被发送如预测的那样到设备。但问题是,该设备没有互联网连接,所以如果我的手机有移动服务,Android会选择该网络作为主要网络,并且Retrofit会尝试通过该服务发送我的数据,而不是Wi-Fi网络,无法连接到本地地址。
现在我发送数据如下之前检查活动的网络:
private boolean isActiveNetworkWifi() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI;
}
如果主动网络不ConnectivityManager.TYPE_WIFI
我简单地要求用户关闭移动服务。
我知道,与棒棒堂开始,你有一个选项,以某种方式注册您的网络电话与移动服务一起使用,例如不能上网的Wi-Fi网络:
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
但我该如何使用,在条件使用Retrofit控制器?