2013-06-28 4 views
68

эта ошибка действительно действительно странная, и я не знаю, как ее воспроизвести и как ее исправить, потому что я сделал много поисков, но ничего не было полезно.SecurityException: Permission denied (отсутствует разрешение INTERNET?)

Вот StackTrace:

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.<init>(HttpConnection.java:70) 
14  at libcore.net.http.HttpConnection.<init>(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.<init>(HttpConnection.java:70) 
46  at libcore.net.http.HttpConnection.<init>(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.<init>(HttpConnection.java:70) 
83  at libcore.net.http.HttpConnection.<init>(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.<init>(HttpConnection.java:70) 
115  at libcore.net.http.HttpConnection.<init>(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

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="my_app_package" 
    android:installLocation="auto" 
    android:versionCode="my_version_code" 
    android:versionName="my_version_name" > 

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

    <supports-screens 
     android:anyDensity="true" 
     android:largeScreens="true" 
     android:normalScreens="true" 
     android:resizeable="true" 
     android:smallScreens="true" 
     android:xlargeScreens="true" /> 

    <uses-feature android:glEsVersion="0x00010001" /> 

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

    <application 
     android:allowTaskReparenting="true" 
     android:debuggable="true" 
     android:icon="@drawable/mxm_icon" 
     android:label="@string/musicbrowserlabel" 
     android:theme="@style/Theme.Music" > 

     <!-- MY ACTIVITIES --> 



    </application> 

</manifest> 

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

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

+0

Возможно ли, что имя хоста изменилось (из-за этого сообщения об ошибке): Нет адреса, связанного с именем хоста – Opiatefuchs

+0

, вы пытались использовать разные версии устройства? или получить на каждой версии? –

+0

плз добавить <использует-разрешение андроида: имя = "android.permission.INTERNET" /> <использует-разрешение андроида: имя = "android.permission.ACCESS_NETWORK_STATE" /> Вне Тег Пожалуйста перестраивать ваш проект и запустить. это сработало для меня – Azahar

ответ

102

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


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

My Manifest is correct, так как это может произойти?

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

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

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

Я не хочу, чтобы разбить ...

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

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

Примечания

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

Дополнения (2015-07- 16)

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

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

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

Дополнительную информацию см. На странице behavior changes description и убедитесь, что ваше приложение будет корректно работать и на более новых системах.Это особенно важно, когда ваш проект установил targetSdk не менее 23, как тогда вы must поддержка новых разрешений (detailed documentation). Если вы не готовы, убедитесь, что вы сохраняете targetSdk не более 22, так как это гарантирует, что даже новый Android будет использовать старую систему разрешений при установке вашего приложения.

+2

лучше прочитать вопрос в конце :) (downvote не от меня, чувак) – Opiatefuchs

+0

Это, очевидно, означает, что ему не разрешено создавать сети. Это либо не запрашивается в манифесте, либо не предоставляется платформой (что может быть сделано, например, на корневых устройствах). –

+2

Приобретен этот ответ, чтобы отменить нижний угол от кого-то другого. Сначала я подумал, что вы действительно не читали весь вопрос и просто хотели быть быстрым (кстати, ваш ответ на самом деле был слишком коротким вначале ;-)), но я думаю, что замечание о пользователях (на корневых устройствах) быть способным сорвать ваши запросы на разрешение, было хорошим. – baske

24

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

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

Он установил ее для меня.

+0

Приятно видеть ответ, разработанный для культуры копирования-вставки! –

19

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

+0

Это работало и на меня. :) – tvwxyz

+0

такая глупая ошибка ... Спасибо –

11

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

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

Добавить

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

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

32

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

+0

Теперь это должно быть исправлено в Android Studio 1.4 RC 1 (в настоящее время в Канарском канале). – Tom

2

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

ANDROID.PERMISSION.INTERNET 

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

android.permission.INTERNET 

Второй один является правильным.

+0

Это спасло меня! Такая неприятная IDE ... –

3

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

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

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

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

прав.

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.project"> 
<uses-permission android:name="android.permission.INTERNET"/> 

Dont делают мои ошибки :)

-4

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

xmlns:tools="http://schemas.android.com/tools" 
+0

В файле манифеста (AndroidManifest.xml) этого вопроса нет. – Pang

+0

У меня была эта проблема, и этот код устранил проблему. – jiangyongyuan

2

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

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.someapp.sample"> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme"> 
+0

На самом деле это единственное, что помогло мне :(Не интуитивно. –

0

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

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