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);
}
스마트 폰 (안드로이드 M 6.0.1)은 해당 Wi-Fi 및 모바일 서비스에 연결되어있는 경우가 꺼져 모두 괜찮 간다 : 데이터를 전송하는 예상대로 장치에 연결합니다. 하지만 문제는 기기에 인터넷 연결이 없기 때문에 내 휴대 전화에 모바일 서비스가있는 경우 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
가없는 경우 단순히 모바일 서비스를 해제하는 사용자에게 물어
는 지금은 다음과 같은 데이터를 전송하기 전에 활성 네트워크를 선택합니다.
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
하지만 어떻게 내가 측면에서 것을 사용할 수 있습니다
난 당신이 어떻게 든 네트워크를 등록 할 수있는 옵션이 롤리팝으로 시작하는 모바일 서비스와 함께 같은 없음 - 인터넷 Wi-Fi 네트워크를 사용하지 호출 것을 알고있다 Retrofit 컨트롤러 사용 중?