Як додати маніфест дозволу до програми?


428

Я намагаюся отримати доступ до HTTP-посилання за допомогою HttpURLConnectionAndroid для завантаження файлу, але отримую це попередження LogCat:

УВАГА / System.err (223): java.net.SocketException: У дозволі відмовлено (можливо, відсутній дозвіл INTERNET)

Я додав android.Manifest.permissionдо своєї заявки, але все ще дає той самий виняток.


Вставте вміст маніфесту-дозволу, чи надали Ви дозвіл на INTERNET?
Ентоні Форлоні

я додав імпорт 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
Якщо ви знайдете відповіді, які вирішують ваше запитання або здаєтесь корисними, його корисно вибрати як "відповів" та / або підняти заявку, це допоможе громаді для тих, хто зіткнеться з тими ж проблемами. Це не просто спрямовано на це питання, але й інші запитання, які ви також задали
Ентоні Форлоні

я про це не знав, я зроблю це точно, якщо це вирішить мою проблему
пограбувати

Повідомте про те, якщо у вас виникне щось інше, і я з радістю допоможу.
Ентоні Форлоні

1
У моєму випадку я повинен був переконатися, що це ДУЖЕ ПЕРШИЙ рядок після маніфестного твердження .. де завгодно, і це не працюватиме. v2.2, api рівень 8, htc g1
slf

1
@dialex AFAIK, не існує дочірнього елемента uses-permissionвсередині applicationтегу, а лише manifest.
Ентоні Форлоні

73

Назва дозволу - СЛУЧАЛЬНИЙ СЛУЧАЙНИЙ

Якщо хтось буде боротися з тим самим питанням, це твердження з урахуванням регістру , тому неправильний випадок означає, що ваша програма не отримає дозволу.

НЕПРАВИЛЬНО

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

ПРАВИЛЬНО

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

Це питання може статися, тобто. на автозаповнення в IDE


1
Дякую! Я витрачав цілий день цікаво, чому моя програма не працює. Я новачок в андроїд-студії, і ця проблема раніше не виникала в 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 Manifest (це має бути дію за замовчуванням для відкриття 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

Під час використання затемнення виконайте ці кроки

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

Сподіваюсь, це допомагає


7

Я спізнююсь, але хочу відповісти.

Додано дозвіл у manifest.xmlподібному вигляді

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

Цього достатньо для стандартних дозволів, коли користувач не вимагає дозволу. Однак недостатньо додати дозвіл лише для виявлення, якщо це небезпечний дозвіл. Дивіться андроїд док . Як і камера, дозволи на зберігання.

<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

Це може бути цікавим також у випадку додавання дозволу INTERNET до вашої заявки:

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

Джерело: http://www.howtogeek.com/190863/androids-app-permissions-were-just-simplified-now-theyre-much-less-secure/

Суть полягає в тому, що вам все одно потрібно додати дозвіл INTERNET у файл маніфесту, але додаток буде оновлено на пристроях користувача, не запитуючи їх про новий дозвіл.


-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.