我有一個應用程序必須通過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控制器?