오류 메시지 'java.net.SocketException : 소켓 실패 : EACCES (권한 거부)'


180

오류 메시지가 나타납니다

java.net.SocketException : 소켓 실패 : EACCES (권한 거부)

아래 코드를 적용하려고 할 때. 이것은 내가 호출하는 함수 이며이 예외를 제공합니다.

public void run() {
    // TODO Auto-generated method stub
    URL myurl = null;

    try {
        myurl = new URL("http://10.0.2.2/list.JSON");
    }
    catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        URLConnection myconn = myurl.openConnection();
        InputStream in = new BufferedInputStream(myconn.getInputStream());
        InputStreamReader reader = new InputStreamReader(in);
        BufferedReader br = new BufferedReader(reader);
        String line;
        StringBuilder sb = new StringBuilder();
        while ((line=br.readLine()) != null)
        {
            sb.append(line);
            //Toast.makeText(getApplicationContext(), "I enter here", Toast.LENGTH_LONG).show();
        }
        jsoncode = sb.toString();
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    threading = true;
    super.run();
}

LogCat :

06-30 11:33:21.457: W/System.err(619): java.net.SocketException: socket failed: EACCES (Permission denied)
06-30 11:33:21.467: W/System.err(619):     at libcore.io.IoBridge.socket(IoBridge.java:573)
06-30 11:33:21.467: W/System.err(619):     at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
06-30 11:33:21.479: W/System.err(619):     at java.net.Socket.checkOpenAndCreate(Socket.java:663)
06-30 11:33:21.479: W/System.err(619):     at java.net.Socket.connect(Socket.java:807)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:77)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
06-30 11:33:21.479: W/System.err(619):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
06-30 11:33:21.487: W/System.err(619):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
06-30 11:33:21.487: W/System.err(619):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
06-30 11:33:21.497: W/System.err(619):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
06-30 11:33:21.497: W/System.err(619):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
06-30 11:33:21.497: W/System.err(619):     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
06-30 11:33:21.497: W/System.err(619):     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
06-30 11:33:21.497: W/System.err(619):     at com.apk.PItestActivity$connection.run(PItestActivity.java:190)
06-30 11:33:21.507: W/System.err(619): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied)
06-30 11:33:21.517: W/System.err(619):     at libcore.io.Posix.socket(Native Method)
06-30 11:33:21.517: W/System.err(619):     at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:169)
06-30 11:33:21.527: W/System.err(619):     at libcore.io.IoBridge.socket(IoBridge.java:558)
06-30 11:33:21.527: W/System.err(619):     ... 15 more

그리고 이것은 내 매니페스트 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.apk"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="14" />
    <permission android:name="android.permission.INTERNET"></permission>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".PItestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="addfriend"></activity>
        <activity android:name="updateDetails"></activity>
        <activity android:name="Details"></activity>
        <activity android:name="updateimage"></activity>
    </application>
</manifest>

이 문제를 어떻게 해결할 수 있습니까?


장치 또는 에뮬레이터에서 확인하고 있습니까?
Ponmalar

답변:


356

시도해보십시오

<uses-permission android:name="android.permission.INTERNET"/>

대신에,

<permission  android:name="android.permission.INTERNET"></permission>

1
+1. 또한 이것이 실제 문제와 관련이 없지만 이 변경을 한 후에 올바른 APK 를 설치하는 것을 잊지 마십시오 ... 나는 .apk의 다른 사본을 별도의 디렉토리에 보관하고 나 자신을 속였습니다. 거기에서 설치하기 전에 새 것을 덮어 쓰지 않았습니다.
n611x007

일식을 사용하여 권한 탭이있는 고급 편집기로 AndroidManifest.xml을 편집 할 수 있습니다. 사용 권한을 추가하고 드롭 다운 메뉴에서이 권한을 선택하십시오.
jjohn

4
중요-uses-permission 태그는 매니페스트 파일에서 응용 프로그램 태그 앞에 있어야합니다. 그게 나를 위해 적어도 그것을 고쳤다 ..
또는 Gal

39

이 시도:

<uses-permission android:name="android.permission.INTERNET"/>

그리고 당신 activity names은 다음과 같이해야합니다 capital letters:

<activity android:name=".Addfriend"/>
    <activity android:name=".UpdateDetails"/>
    <activity android:name=".Details"/>
    <activity android:name=".Updateimage"/>

4
-답변에 추가 정보가있는 경우 이미 답변 한 내용 만 게시 한 다음 해당 답변을 지원하십시오.
user370305 2016 년

1
@ user370305 실례합니다. 추가 정보 만 게시해야합니까? 네이티브가 아니기 때문에 나는 당신이 무엇을 의미하는지 알 수 없지만 메타에 대해 알고 싶습니다.
n611x007

32

시도 해봐.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

2
누군가가 여전히 이것을 어디에
넣을지

19

태그 <uses-permission>밖으로 이동하십시오 <application>.


7

장치 에서 앱 을 제거한 다음 다시 설치 하면 문제가 해결되었습니다.

다른 모든 옵션을 시도했지만 아무것도 없습니다. 마침내이 게시물을 찾았 습니다 . 이것은 권한을 추가하고 (아래) 빌드를 정리 한 후입니다.

<uses-permission android:name="android.permission.INTERNET"/>


0

다음과 같이 해당 소스 코드를 Java 파일에 추가하십시오.

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());

5
이것은 매니페스트의 권한 누락에 관한이 질문에 대한 답변이 아닙니다. 그리고 이것은 문제에 대한 매우 나쁜 대답 NetworkOnMainThreadException입니다.
laalto

0

AndroidStudio-Build-Clean을 수행해야 할 수도 있습니다.

파일 시스템 또는 Git을 통해 매니페스트를 업데이트 한 경우 변경 사항이 적용되지 않습니다.


0

테스트에 에뮬레이터를 사용하는 경우 <uses-permission android:name="android.permission.INTERNET" />에만 사용 하고 무시 해야합니다 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.