Android 애플리케이션에서 인터넷에 액세스하려면 어떤 권한이 필요합니까?


596

내 앱을 실행하면 다음과 같은 예외가 발생합니다.

java.net.SocketException: Permission denied (maybe missing INTERNET permission)

누락 된 권한 문제를 어떻게 해결합니까?

답변:


1245

매니페스트 파일에 인터넷 권한을 추가 하십시오.

이 줄을 추가해야합니다 :

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

AndroidManifest.xml의 애플리케이션 태그 외부


43
이 태그는 응용 프로그램 태그 앞에 배치해야합니다. TAG를 곱한 후 넣으면 경고가 표시됩니다.
— Marek

2
에뮬레이터를 다시 시작하십시오 (이 기능이 적용 되려면 필요했습니다).
— jcalfee314

문제가 있습니다. 내 APK의 인터넷에 액세스하고 싶지 않습니다. 매니페스트에 권한이 추가되지 않았지만 apk를 설치하려고하면 설치 알림을 받으면 해당 APK에 전체 인터넷 액세스가 필요합니다. 이 문제를 해결하는 방법? 매니페스트에 추가 된 권한이 없습니다. 내 APK는 완전한 인터넷 액세스가 필요하지 않습니다-나는이 퍼미션을 비활성화하고 싶습니다.
— Altivo

1
@Altivo ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml에서 병합 된 매니페스트를보십시오. 여기에 앱이 사용하는 모든 권한이 있습니다. 앱의 매니페스트와 사용 된 라이브러리의 매니페스트를 병합하여 구성됩니다. 인터넷 및 ACCESS_NETWORK_STATE 권한이 포함 된 Google Play 서비스 라이브러리를 주로 사용해야합니다.
— Sid

116

최신 버전의 Google Play에서 Google은 "현재 대부분의 앱에서 필요로하기 때문에"인터넷에 대한 권한을 요구할 필요가 없습니다. 그러나 이전 버전을 사용하는 사용자의 경우 매니페스트에 아래 코드를 남겨 두는 것이 좋습니다.

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

1
Google 문서에 대한 언급이 있습니까?
— farindk


24
Play 스토어에서 앱 설치 여부를 물을 때 사용자에게 표시되는 기본 권한 목록에 인터넷 권한이 포함되지 않는 방법에 대해 설명하는 문서입니다. 그것은 하지 않습니다 인터넷을 더 이상 요구를 사용하는 응용 프로그램은이 사용 권한의 그것의 매니페스트 목록에 그렇게 선언하는 것을 말한다. 모든 앱 이 명시 적 으로 말하지 않고 인터넷을 암시 적으로 사용한다고 말합니까? 야누가의 질문에서 같은 응용 프로그램 실행 한 경우 즉, 오늘날의 , 그것은 것입니다 전화를 하지 질문이 질문을 받았다 때했던 방법을 실패?
— Rob Kennedy

2
권한 문서 를 참조하면 더 이상 사용되지 않음을 알 수 있습니다. 더 이상 사용되지 않는 권한은 더 이상 사용되지 않기 때문에 사용하지 않는 권한입니다. 사용되지 않은 권한은 API가 교체되었거나 더 이상 필요하지 않기 때문일 수 있습니다. 인터넷에 액세스하려면 인터넷 권한이 필요합니다. 인터넷 연결에 대한 기본 문서조차도 인터넷 권한이 필요하다고 명시합니다.
— Zoe


76

아래처럼 위의 라인을 넣으십시오.

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

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name="com.example.exp.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>


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

NTLM / Windows 인증을 허용하는 데 필요한 다른 권한에 대해 알고 있습니까? 특히 XenMobile 환경에서 ... 여기에 다트를 던지십시오.
— whyoz

12

앱에서 인터넷을 사용하고 네트워크 상태를 확인하려면 즉, 앱이 인터넷에 연결되어 있는지 확인하려면 application태그 외부에서 아래 코드를 사용해야합니다 .

인터넷 권한의 경우 :

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

액세스 네트워크 상태의 경우 :

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

완전한 코드 :

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

7

인터넷 만 사용한다면

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

인터넷 상태를 얻는다면 다음도 사용하십시오.

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

애플리케이션 태그 바로 위에 있습니다.


6

매니페스트에 권한을 추가하는 것을 잊어라.

public static boolean hasPermissions(Context context, String... permissions)
{
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null)
    {
        for (String permission : permissions)
        {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED)
            {
                return false;
            }
        }
    }
    return true;
}

이것을 Main에 쓰세요

int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_SMS, Manifest.permission.CAMERA};

    if (!hasPermissions(this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
    }

4

이것을 사용하십시오 :

<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" />

3

AndroidManifest에서 아래 코드를 넣으십시오.

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

3

현재 버전에 따라 Android는 인터넷과 상호 작용하기 위해 권한을 요청하지 않지만 이전 버전을 사용하는 사용자에게 도움이되는 아래 코드를 추가 할 수 있습니다 .AndroidManifest에서 추가하십시오.

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


1

Google은 최신 버전의 인터넷에 대한 권한을 요구할 필요가 없습니다. 여전히 코드에서 인터넷 권한을 요청하려면이를 AndroidManifest.xml 파일에 추가해야합니다.

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