SecurityException: разрешение отклонено (отсутствует разрешение INTERNET?)

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

Вот стек:

Stack Trace _________________________________ 0 java.lang.RuntimeException: An error occured while executing doInBackground() 1 at android.os.AsyncTask$3.done(AsyncTask.java:299) 2 at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 3 at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 4 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 5 at java.util.concurrent.FutureTask.run(FutureTask.java:137) 6 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 7 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 8 at java.lang.Thread.run(Thread.java:856) 9 Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?) 10 at java.net.InetAddress.lookupHostByName(InetAddress.java:430) 11 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 12 at java.net.InetAddress.getAllByName(InetAddress.java:214) 13 at libcore.net.http.HttpConnection.(HttpConnection.java:70) 14 at libcore.net.http.HttpConnection.(HttpConnection.java:50) 15 at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 16 at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 17 at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 18 at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 19 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 20 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 21 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 22 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 23 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292) 24 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185) 25 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271) 26 at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143) 27 at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982) 28 at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211) 29 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28) 30 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1) 31 at android.os.AsyncTask$2.call(AsyncTask.java:287) 32 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 33 ... 4 more 34 Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 35 at libcore.io.Posix.getaddrinfo(Native Method) 36 at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) 37 at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 38 ... 26 more 39 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied) 40 ... 29 more 41 java.lang.SecurityException: Permission denied (missing INTERNET permission?) 42 at java.net.InetAddress.lookupHostByName(InetAddress.java:430) 43 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 44 at java.net.InetAddress.getAllByName(InetAddress.java:214) 45 at libcore.net.http.HttpConnection.(HttpConnection.java:70) 46 at libcore.net.http.HttpConnection.(HttpConnection.java:50) 47 at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 48 at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 49 at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 50 at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 51 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 52 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 53 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 54 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 55 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292) 56 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185) 57 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271) 58 at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143) 59 at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982) 60 at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211) 61 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28) 62 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1) 63 at android.os.AsyncTask$2.call(AsyncTask.java:287) 64 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 65 at java.util.concurrent.FutureTask.run(FutureTask.java:137) 66 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 67 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 68 at java.lang.Thread.run(Thread.java:856) 69 Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 70 at libcore.io.Posix.getaddrinfo(Native Method) 71 at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) 72 at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 73 ... 26 more 74 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied) 75 ... 29 more 76 libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 77 at libcore.io.Posix.getaddrinfo(Native Method) 78 at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) 79 at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 80 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 81 at java.net.InetAddress.getAllByName(InetAddress.java:214) 82 at libcore.net.http.HttpConnection.(HttpConnection.java:70) 83 at libcore.net.http.HttpConnection.(HttpConnection.java:50) 84 at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 85 at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 86 at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 87 at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 88 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 89 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 90 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 91 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 92 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292) 93 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185) 94 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271) 95 at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143) 96 at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982) 97 at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211) 98 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28) 99 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1) 100 at android.os.AsyncTask$2.call(AsyncTask.java:287) 101 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 102 at java.util.concurrent.FutureTask.run(FutureTask.java:137) 103 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 104 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 105 at java.lang.Thread.run(Thread.java:856) 106 Caused by: libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied) 107 ... 29 more 108 libcore.io.ErrnoException: getaddrinfo failed: EACCES (Permission denied) 109 at libcore.io.Posix.getaddrinfo(Native Method) 110 at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) 111 at java.net.InetAddress.lookupHostByName(InetAddress.java:405) 112 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 113 at java.net.InetAddress.getAllByName(InetAddress.java:214) 114 at libcore.net.http.HttpConnection.(HttpConnection.java:70) 115 at libcore.net.http.HttpConnection.(HttpConnection.java:50) 116 at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 117 at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 118 at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 119 at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 120 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 121 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 122 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 123 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 124 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292) 125 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185) 126 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271) 127 at com.designfuture.music.api.MusixMatchApi.sendRequestJSON(MusixMatchApi.java:1143) 128 at com.designfuture.music.api.MusixMatchApi.handleRequestJSON(MusixMatchApi.java:982) 129 at com.designfuture.music.api.MusixMatchApi.getConfig(MusixMatchApi.java:211) 130 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:28) 131 at com.designfuture.music.asynctask.GetConfigAsyncTask.doInBackground(GetConfigAsyncTask.java:1) 132 at android.os.AsyncTask$2.call(AsyncTask.java:287) 133 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 134 at java.util.concurrent.FutureTask.run(FutureTask.java:137) 135 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 136 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 137 at java.lang.Thread.run(Thread.java:856) 

Вот мой AndroidManifest.xml

           

Пожалуйста, не беспокойтесь, спрашивая меня, есть ли у меня правильное разрешение INTERNET в моем манифесте, потому что это приложение находится на рынке с 2 лет: P

Я также заметил, что (от Crittercism) все ошибки исходят из версии Android 4.1.x (JB). Я не знаю, связано ли устройство или что (на данный момент я не вижу эту информацию)

ПРИМЕЧАНИЕ. Я написал этот ответ в июне 2013 года, поэтому теперь он устарел. С тех пор некоторые вещи изменились в Android начиная с версии 6 (Marshmallow) платформы, что сделало всю проблему более / менее устаревшей в наши дни. Тем не менее, я считаю, что этот пост все равно может быть прочитан как общий пример анализа проблемы, поэтому я надеюсь, что вы все равно сможете найти его образовательным.


Исключение, которое вы получаете ( SecurityException: Permission denied (missing INTERNET permission?) ), Ясно указывает, что вам не разрешено создавать сети. Это довольно неоспоримый факт. Но как это может произойти? Обычно это либо из-за отсутствия записи в вашем файле AndroidManifest.xml либо, поскольку разрешение на доступ к Интернету предоставляется при установке не во время выполнения, по длительной, пропущенной ошибке в платформе Android, которая заставляет ваше приложение быть успешно установлено, но без ожидаемого разрешения.

Мой манифест верен, так как это может произойти?

Теоретически наличие uses-permission в Manifest прекрасно соответствует требованию, и с точки зрения разработчика это все, что нужно сделать, чтобы иметь возможность создавать сети. Более того, поскольку разрешения разрешены пользователю во время установки, факт, что приложение установлено на устройстве пользователя, означает, что он предоставил то, о чем вы просили (в противном случае установка будет отменена), поэтому предположим, что если ваш код будет выполнен, все запрошенные разрешения будут предоставлено. И как только он предоставлен, пользователь не может отменить разрешение иначе, чем полностью удалить приложение, поскольку стандартная платформа Android (от AOSP) не предлагает такой функции на данный момент.

Но все становится все более сложным, если вы также не против своего приложения, работающего на корневых устройствах. В Google Play доступны инструменты, которые можно установить для управления разрешениями, предоставляемыми установленным приложениям во время выполнения, например: Разрешения Отказано и другие. Это также может быть сделано с CyanogenMod , брендом поставщика (например, LG) или другим пользовательским ROM , с различными типами «менеджеров конфиденциальности» или аналогичных инструментов.

Поэтому, если приложение заблокировано в любом случае, оно в основном заблокировано пользователем, и если это так, это действительно больше проблем пользователя в этом случае (или он / она не понимает, какие определенные опции / инструменты действительно делают и каковы будут последствия) чем ваш, поскольку стандартный SDK (и большинство приложений написаны с учетом этого SDK) просто не ведет себя так. Поэтому я сильно сомневаюсь, что эта проблема возникает на «стандартном», ненавязчивом устройстве с запасом (или продавцом, например, Samsung, HTC, Sony и т. Д.).

Я не хочу рушиться …

Правильно реализованное управление разрешениями и / или блокировка должны учитывать тот факт, что большинство приложений могут быть не готовы к ситуации, когда доступ к некоторым функциям предоставляется и недоступен одновременно, поскольку это противоречие, когда приложение использует манифест для запросить доступ во время установки. Контроль доступа, выполненный правильно, должен заставить все работать по-прежнему и по-прежнему ограничивать юзабилити, используя методы в ожидаемом поведении функции. Например, когда разрешено определенное разрешение (например, GPS, доступ в Интернет), такая функция может быть доступна из перспективы приложения / пользователя (т. Е. Вы можете включить GPS или попытаться подключиться), измененная реализация не может предоставить никаких реальных данных – т.е. GPS всегда может возвращать никакие координаты, например, когда вы находитесь в помещении или не имеете «исправления» спутника. Доступ к Интернету предоставляется по-прежнему, но вы не можете добиться успешного соединения, так как нет покрытия или маршрутизации данных. Подобные сценарии следует ожидать и при нормальном использовании, поэтому приложения уже должны обрабатываться. Поскольку это просто может произойти при обычном ежедневном использовании, любой сбой в такой ситуации, скорее всего, будет связан с ошибками приложений.

Нам не хватает слишком много информации об окружающей среде, на которой эта проблема возникает, чтобы диагностировать проблему без угадывания, но в качестве своего рода решения вы можете использовать setDefaultUncaughtExceptionHandler (), чтобы уловить такие неожиданные исключения в будущем и, т. Е. Просто показать подробную информацию о пользователе, какое разрешение ваше приложение нуждается, а не просто сбой. Обратите внимание, что использование этого скорее всего будет противоречить инструментам, таким как Crittercism, ACRA и другим, поэтому будьте осторожны, если вы используете любой из них.

Заметки

Имейте в виду, что android.permission.INTERNET – это не единственное связанное с сетью разрешение, которое вам может потребоваться объявить в манифесте, чтобы успешно выполнить сетевое взаимодействие. Предоставление разрешения INTERNET просто позволяет приложениям открывать сетевые сокеты (что в основном является фундаментальным требованием для любой передачи сетевых данных). Но если ваш сетевой стек / библиотека захочет получить информацию о сетях, то вам также понадобится android.permission.ACCESS_NETWORK_STATE в вашем манифесте (который требуется клиенту HttpUrlConnection ( см. Учебник ).


Добавление (2015-07-16)

Обратите внимание, что Android 6 (он же Marshmallow) представил совершенно новый механизм управления разрешениями, называемый Runtime Permissions . Это дает пользователю больше контроля над тем, какие разрешения предоставляются (также разрешает выборочный грант) или позволяет аннулировать уже предоставленные разрешения без необходимости удаления приложения:

Этот […] вводит новую модель разрешений, где теперь пользователи могут напрямую управлять разрешениями приложений во время выполнения. Эта модель дает пользователям улучшенную видимость и контроль над разрешениями, а также оптимизирует процессы установки и автоматического обновления для разработчиков приложений. Пользователи могут предоставлять или отменять разрешения для установленных приложений.

Однако изменения не влияют на разрешения INTERNET или ACCESS_NETWORK_STATE , которые считаются «нормальными» разрешениями. Пользователю не нужно явно предоставлять эти разрешения.

Подробнее см. Страницу описания изменений поведения и убедитесь, что ваше приложение будет корректно вести себя и в новых системах. Это особенно важно, когда ваш проект задает targetSdk как минимум 23 как тогда вы должны поддерживать новую модель разрешений ( подробная документация ). Если вы еще не готовы, убедитесь, что вы сохраняете targetSdk не более 22 как это гарантирует, что даже новый Android будет использовать старую систему разрешений при установке вашего приложения.

Android Studio 1.3b1 (не уверен в других версиях) автозаполнял мое интернет-разрешение для ANDROID.PERMISSION.INTERNET . Сменив его на android.permission.INTERNET исправлена ​​проблема.

Добавьте в файл манифеста строку:

  

Он исправил это для меня.

Убедитесь, что место, где вы добавляете

  

верно.

Вы должны написать это так в AndroidManifest.xml:

   

Не делай моих ошибок 🙂

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

У меня также была эта проблема. было странно, что он работал на моем эмуляторе леденец, но не на моем реальном устройстве kitkat.

Android Studio теперь заставит вас написать верхний регистр разрешения, и в этом проблема.

Добавить

   

Над вкладкой приложения она будет работать.

Положите это разрешение вне желательно перед тегом, я попробовал его, и он работает для меня.

   

Напишите свое разрешение перед тегом приложения, как указано ниже.

     

если это адрес IPv6, посмотрите на это: https://code.google.com/p/android/issues/detail?id=33046

Похоже, в Android появилась ошибка, которая была исправлена ​​в 4.3 (?).

Как сказал Том. Когда вы начнете с капитала A автозаполнение завершит его.

 ANDROID.PERMISSION.INTERNET 

Когда вы начнете вводить текст с a автозаполнения, оно будет завершено как

 android.permission.INTERNET 

Второй – правильный.

Ну, это очень запутанная ошибка. Могло быть много причин:

  1. Вы не упоминаете разрешения в правильном месте. Как прямо над приложением.
  2. Вы не используете маленькие буквы.
  3. В некоторых случаях вам также нужно добавить разрешение на использование сети.
  4. Один из которых был моим случаем, есть несколько пустых строк в манифестных строках. Например, может быть пустая строка между тегом разрешения и строкой приложения. Удалите их, и все готово. Надеюсь, это поможет

удалите это в файле манифеста

  xmlns:tools="http://schemas.android.com/tools" 
  • Получение IP-адреса клиента: REMOTE_ADDR, HTTP_X_FORWARDED_FOR, что еще может быть полезно?
  • Как предотвратить запрос, который возвращает 304
  • PUT против POST в REST
  • Как работать с доменами cookie браузера?
  • Загрузка файла на HTTP-сервер в программировании на iphone
  • WSS по HTTP и WSS на HTTPS
  • Могу ли я каким-то образом выполнить синхронный HTTP-запрос через NSURLSession в Swift
  • Как обрабатывать несколько файлов cookie с тем же именем?
  • Официальные ссылки на значения по умолчанию для одновременных соединений HTTP / 1.1 на сервер?
  • System.Net.WebClient неоправданно медленный
  • Выполнение вызова cURL в C #
  • Давайте будем гением компьютера.