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


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


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/>объявлением тега.


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

12

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

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

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


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

4

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

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

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

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


-1

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

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

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

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