Какое разрешение мне нужно для доступа в Интернет из приложения Android?


596

Я получаю следующее исключение при запуске моего приложения:

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

Как решить проблему с отсутствующим разрешением?

Ответы:


1245

Добавьте разрешение ИНТЕРНЕТ к файлу манифеста.

Вы должны добавить эту строку:

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

вне тега приложения в вашем AndroidManifest.xml


43
Этот тег должен быть помещен перед тегом приложения. Если ставить if после аппликации TAG, выдает предупреждение.
Марек

2
Перезапустите Эмулятор (это было необходимо для меня, прежде чем это вступит в силу).
jcalfee314

У меня проблема. Я не хочу доступ в интернет для моего apk. Разрешение не добавлено в манифест, но если я попытаюсь установить apk, установка сообщит мне, что apk нужен полный доступ к Интернету. Как решить эту проблему ? разрешения не добавлены в манифест. Мой apk не требуется полный доступ в Интернет - я хочу отключить это разрешение.
Altivo

1
@Altivo Посмотрите на ваш объединенный манифест в ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml. Здесь вы найдете все разрешения, которые использует ваше приложение. Это формируется путем объединения манифеста вашего приложения и манифестов используемых библиотек. В основном вы должны использовать библиотеку сервисов Google Play, которая содержит разрешения INTERNET и ACCESS_NETWORK_STATE.
Сид

116

В последнем выпуске Google Play Google устранил необходимость запрашивать разрешение на доступ в Интернет, поскольку «в настоящее время это требуется большинству приложений». Тем не менее, для пользователей, которые имеют более старые версии, все же рекомендуется оставить код ниже в вашем манифесте

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

1
Любая ссылка на документ Google, где говорится так?
farindk

@farindk - первый раздел заметок здесь: support.google.com/googleplay/answer/6014972?hl=ru
Финли Смит

24
В документе, на который вы ссылаетесь, рассказывается о том, что Play Store не будет включать интернет-разрешение в основной список разрешений, которые он отображает пользователю при запросе на установку приложения. В нем не говорится, что приложению, использующему Интернет, больше не нужно объявлять об этом в списке используемых разрешений своего манифеста. Вы хотите сказать, что все приложения неявно используют Интернет, не говоря об этом в своих манифестах? То есть, если бы Janusz запустил то же самое приложение из вопроса в сегодняшних телефонах, оно бы не подвело, как это было, когда был задан вопрос?
Роб Кеннеди

2
Если вы обратитесь к документам с разрешениями, вы увидите, что они не устарели. Устаревшие разрешения - это неиспользуемые разрешения, которые вам не нужны в манифесте, потому что они больше не используются. Неиспользуемые разрешения могут быть вызваны тем, что API был заменен, или потому, что он больше не нужен. Так что да, вам нужно разрешение на доступ в Интернет. Даже в основных документах по подключению к Интернету также указывается, что требуется разрешение на доступ в Интернет.
Зоя


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;
}

и напиши это в своей главной

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"/>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.