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.