2017-02-28 10 views
0

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 컨트롤러 사용 중?

답변

1

이것은 개조 문제는 아니지만 인터넷 사용 연결 요청을 관리하는 Lollipop이 Android를 대신 사용하여 Android의 "지능"을 손상시킵니다. 이 문제를 관리하려면 특정 네트워크 유형에 대한 연결을 명시 적으로 바인딩해야합니다. 나는 Retrofit (소켓 레벨에서 같은 문제가 있지만)을 해결하는 방법을 모른다. 그러나 여기에 해결 방법에 대한 더 많은 통찰력을 줄 수있는 기사가있다. Connecting your App to a Wi-Fi Device