Який дозвіл мені потрібен для доступу до Інтернету через додаток Android?


596

У моєму додатку я отримую таку виняток:

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

Як вирішити проблему, яка відсутня?

Відповіді:


1245

Додайте дозвіл INTERNET у файл маніфесту.

Ви повинні додати цей рядок:

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

поза тегом програми у вашому AndroidManifest.xml


43
Цей тег слід розміщувати перед ТЕГАМИ заявки. Якщо ви ставите, якщо після застосування TAG, він видає попередження.
Марек

2
Перезавантажте емулятор (мені це було потрібно до того, як це набуде чинності).
jcalfee314

У мене проблема. Я не хочу доступу до Інтернету для моєї apk. Ніякого дозволу не додано до маніфесту, але якщо я спробую встановити apk, установка повідомить мене, що для АПК потрібен ПОВНИЙ ДОСТУП ІНТЕРНЕТ. Як вирішити цю проблему? до маніфесту не додано жодних дозволів. Моєму apk не потрібен повний доступ до Інтернету - я хочу відключити це дозвіл.
Алтіво,

1
@Altivo Подивіться на ваш об'єднаний маніфест у ../app/build/intermediates/manifests/full/debug/AndroidManifest.xml. Тут ви знайдете усі дозволи, якими користується ваш додаток. Це формується шляхом об'єднання маніфесту вашої програми, а також маніфестів використовуваних бібліотек. Напевно, ви в основному використовували бібліотеку служб Google Play, яка містить дозволи на INTERNET та ACCESS_NETWORK_STATE.
Sid

116

В останньому випуску Google Play Google усунув необхідність просити дозволу в Інтернеті, оскільки "більшості додатків це потрібно будь-коли". Однак для користувачів, які мають старіші версії, рекомендується залишити код нижче у своєму маніфесті

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

1
Будь-яка посилання на документ Google, де так написано?
farindk

@farindk перший розділ примітки тут: support.google.com/googleplay/answer/6014972?hl=uk
Фінлі Сміт

24
Документ, який ви посилаєте, розповідає про те, як Play Store не буде включати в себе Інтернет-дозвіл у первинному списку дозволів, який він відображає користувачеві при запиті про встановлення програми. Це не говорить про те, що додаток, який використовує Інтернет, більше не повинен заявляти, що це робить у списку використаних дозволів у своєму маніфесті. Ви хочете сказати, що всі програми неявно використовують Інтернет, не говорячи про це у своїх маніфестах? Тобто, якби Януш запустив той самий додаток із запитання в сучасних телефонах, він би не провалив так, як це робив, коли запитували?
Роб Кеннеді

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.