Как добавить манифест разрешения для приложения?

428

Я пытаюсь получить доступ к HTTP-ссылке HttpURLConnectionв Android для загрузки файла, но получаю это предупреждение LogCat:

WARN / System.err (223): java.net.SocketException: разрешение отклонено (возможно, отсутствует разрешение на доступ в Интернет)

Я добавил android.Manifest.permissionв свое приложение, но оно все еще дает то же исключение.

грабить
источник
Вставьте содержимое вашего манифеста-разрешения, предоставили ли вы разрешения для Интернета?
Энтони Форлони
я добавил импорт android.Manifest.permission; к приложению, больше ничего. Что еще мне нужно добавить, чтобы предоставить разрешения
ограбить
2
Посмотрите на мой ответ ниже и посмотрите, поможет ли это, и я понятия не имею, что import android.Manifest.permissionбудет с вами делать, если у вас не установлено разрешение INTERNET в файле AndroidManifest.xml
Энтони Форлони,

Ответы:

935

Предполагая, что у вас не установлены права доступа из LogCatописания ошибки, вот мое содержимое для моего AndroidManifest.xmlфайла, который имеет доступ к Интернету:

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

Кроме этого, у вас должно быть хорошо, чтобы загрузить файл из Интернета.

Энтони Форлони
источник
3
Если вы находите ответы, которые решают ваш вопрос или кажутся вам полезными, его полезно выбрать как «отвеченный» и / или upvote, это поможет сообществу для тех, кто сталкивается с такими же проблемами. Это касается не только этого вопроса, но и других вопросов, которые вы задали,
Энтони Форлони,
я не знал об этом, я сделаю это наверняка, если это решит мою проблему
ограбить
сообщите, если вы столкнетесь с чем-то другим, и я буду более чем рад помочь.
Энтони Форлони
1
В моем случае я должен был убедиться, что это ОЧЕНЬ ПЕРВАЯ строка после заявления манифеста ... где-нибудь ниже этого, и это не будет работать. v2.2, API-
интерфейс
1
@dialex AFAIK, uses-permissionвнутри applicationтега нет дочернего элемента , только manifest.
Энтони Форлони
73

Название разрешения CASE-SENSITIVE

В случае, если кто-то будет бороться с той же проблемой, это чувствительное к регистру утверждение, поэтому неправильный регистр означает, что ваше приложение не получит разрешение.

НЕПРАВИЛЬНО

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

ПРАВИЛЬНЫЙ

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

Эта проблема может произойти, т.е. на автозаполнение в IDE

Марек Себера
источник
1
Спасибо! Я потратил впустую весь свой день, размышляя, почему мое приложение не работает. Я новичок в Android Studio, и эта проблема не возникала в Eclipse раньше :)
InspiredCoder
1
И я потратил впустую весь свой день, выясняя, в чем на самом деле разница между ними, OMG, его Капиталом и Малым ANDROID.PERMISSION и android.permission;): p
fWd82
Документация: developer.android.com/training/basics/network-ops/...
квант
40
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.photoeffect"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="com.example.towntour.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Black.NoTitleBar" >
    <activity
        android:name="com.photoeffect.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>

</manifest>
Терайя Маюр
источник
34

Если для разработки вы используете плагин Eclipse ADT, откройте его AndroidManifest.xmlв редакторе манифестов Android (это должно быть действие по умолчанию для открытия AndroidManifest.xmlиз списка файлов проекта).

После этого выберите Permissionsвкладку в нижней части редактора ( Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml), затем нажмите Add...a Uses Permissionи выберите нужное разрешение в раскрывающемся меню справа или просто скопируйте и вставьте нужное (например android.permission.INTERNET, требуемое разрешение).

Крис
источник
23

Скопируйте следующую строку в файл манифеста приложения и вставьте перед <application> тегом.

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

Размещение разрешения ниже <application/>тега будет работать, но предупредит вас. Поэтому постарайтесь поместить его перед <application/>объявлением тега.

Nitesh
источник
На момент написания этого комментария он выходит за пределы элемента приложения, но внутри манифеста. Например: <приложение> ... </ application> <использует-разрешение android: name = "android.permission.INTERNET" /> </ manifest>
Стив Суинсбург,
12

При использовании Eclipse, выполните следующие действия

1) Дважды щелкните манифест, чтобы отобразить его в редакторе.
2) Нажмите на вкладку разрешений под редактором манифеста.
3) Нажмите кнопку Добавить.
4) В появившемся диалоговом окне Нажмите использует разрешение. (Обычно последний элемент в списке).
5) Обратите внимание на вид, который появляется на правой стороне. Выберите «android.permission.INTERNET».
6) Затем нажмите « ОК» и, наконец, сохраните.

Надеюсь это поможет

Mathayo
источник
7

Я опоздал, но я хочу завершить ответ.

Разрешение добавляется manifest.xmlкак

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

Этого достаточно для стандартных разрешений, когда пользователю не предлагается разрешение. Однако недостаточно добавить разрешение только для манифеста, если это опасное разрешение. Смотрите Android док . Как камера, разрешения на хранение.

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

Вам нужно будет спросить разрешение у пользователя . Я использую библиотеку RxPermission, которая широко используется для запроса разрешения. Потому что это длинный код, который мы должны написать, чтобы спросить разрешения.

RxPermissions rxPermissions = new RxPermissions(this); // where this is an Activity instance // Must be done during an initialization phase like onCreate
rxPermissions
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // Always true pre-M
           // I can control the camera now
        } else {
           // Oups permission denied
        }
    });

Добавить эту библиотеку в ваше приложение

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}
Khemraj
источник
4

Это также может быть интересно в контексте добавления разрешения ИНТЕРНЕТ для вашего приложения:

Google также предоставил каждому приложению доступ к Интернету, фактически удалив разрешение на доступ к Интернету. О, конечно, разработчики Android все еще должны заявить, что они хотят получить доступ к Интернету при сборке приложения. Но пользователи больше не могут видеть разрешение на доступ к Интернету при установке приложения, и текущие приложения, которые не имеют доступа к Интернету, теперь могут получить доступ к Интернету с помощью автоматического обновления, не запрашивая вас.

Источник: http://www.howtogeek.com/190863/androids-app-permissions-were-just-simplified-now-theyre-much-less-secure/

Суть в том, что вам все равно нужно добавить разрешение ИНТЕРНЕТ в файл манифеста, но приложение будет обновляться на устройствах пользователя без запроса их нового разрешения.

lenrok258
источник
-1

Вы должны использовать как состояние сети, так и доступ к сети в файле манифеста, когда вы пытаетесь загрузить или получить доступ к Интернету через эмулятор Android.

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

Если вы даете только разрешение .INTERNET, оно не будет иметь доступа к Интернету.

zemunkh
источник