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

596

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

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

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

Януш
источник

Ответы:

1245

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

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

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

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

mhsmith
источник
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"/>
AndroidDev
источник
знаете ли вы какие-либо другие разрешения, которые могут потребоваться для разрешения проверки подлинности 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"/>
Канварптрит Сингх
источник