Wi-Fi를 통해 특별히 HTTP 연결을해야하는 Android 앱을 개발 중입니다. Android L 이상에서 많은 연결 관련 변경 사항이있는 것으로 보입니다. 나는 HttpURLConnection의 해당 네트워크를 결합 얻을 networkObject.openConnection을 할 수 있어야 ConnectivityManager 및 네트워크 API 문서 당으로특정 연결을 통해 Android 앱에서 트래픽 보내기
ConnectivityManager manager = (ConnectivityManager)
ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
Network[] allNetworks = manager.getAllNetworks();
for(Network network : allNetworks) {
NetworkInfo info = manager.getNetworkInfo(network);
if(info.getType() == ConnectivityManager.TYPE_WIFI && info.getState() == NetworkInfo.State.CONNECTED) {
System.out.println("FOUND WIFI NETWORK!");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
manager.bindProcessToNetwork(network);
}
app.network = network;
break;
}
}
:
이
은 내가 사용하고 코드의 조각이다. 하지만이 유형W/System.err: java.net.SocketException: Binding socket to network 586 failed: EPERM (Operation not permitted)
W/System.err: at android.net.Network.bindSocket(Network.java:362)
W/System.err: at android.net.Network.bindSocket(Network.java:331)
W/System.err: at android.net.Network$NetworkBoundSocketFactory.createSocket(Network.java:182)
W/System.err: at com.android.okhttp.internal.http.SocketConnector.connectRawSocket(SocketConnector.java:155)
W/System.err: at com.android.okhttp.internal.http.SocketConnector.connectCleartext(SocketConnector.java:67)
W/System.err: at com.android.okhttp.Connection.connect(Connection.java:152)
W/System.err: at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185)
W/System.err: at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:437)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245)
W/System.err: at com.mypkg.myapp.utils.HttpRequestBackground.doInBackground(HttpRequestBackground.java:90)
W/System.err: at com.mypkg.myapp.utils.HttpRequestBackground.doInBackground(HttpRequestBackground.java:38)
W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:295)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
W/System.err: Caused by: android.system.ErrnoException: Binding socket to network 586 failed: EPERM (Operation not permitted)
의 예외 뭔가를지고있어이 내가 아주 여기에 무엇이 잘못 이해하고 있지 않다 매니페스트
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
에 선언 된 네트워크 관련 권한입니다.
이유 : 안드로이드는 데이터가 사용 가능하고 연결된 AP에 인터넷이 없는데도 내 앱에서 Wi-Fi 연결을 허용하지 않습니다.