SecurityException: Permissão negada (sem permissão de INTERNET?)

92

esse erro é realmente muito estranho e não sei como reproduzi-lo e como consertá-lo porque fiz muitas pesquisas mas nada adiantou.

Aqui está o 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)

Aqui está meu 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>

Não se preocupe em me perguntar se tenho a permissão de INTERNET correta em meu manifesto porque este aplicativo está no mercado há 2 anos: P

Também notei que (do Crittercism) todos os bugs vêm da versão Android 4.1.x (JB). Não sei se o dispositivo está enraizado ou o quê (não consigo ver esta informação no momento)

StErMi
fonte
é possível que o nome do host tenha mudado (devido a esta mensagem de erro): Nenhum endereço associado ao nome do host
Opiatefuchs
você tentou com diferentes versões do dispositivo? ou obtendo em cada versão?
Pankaj Kumar
1
plz add <uses-permission android: name = "android.permission.INTERNET" /> <uses-permission android: name = "android.permission.ACCESS_NETWORK_STATE" /> Fora da tag <Application> Por favor, reconstrua seu projeto e execute. funcionou para mim
Azahar
A propósito, o pedido é importante, stackoverflow.com/questions/25135595/…
Nabin
@SteErMi você resolveu este problema, estou enfrentando a mesma situação
Ravind Maurya

Respostas:

118

NOTA: Eu escrevi esta resposta em junho de 2013, então ela está um pouco desatualizada atualmente. Muitas coisas mudaram na plataforma Android desde a versão 6 (Marshmallow), tornando todo o problema mais / menos obsoleto nos dias de hoje. No entanto, acredito que este post ainda pode valer a pena ser lido como um exemplo de abordagem de análise de problemas gerais.


A exceção que você está recebendo ( SecurityException: Permission denied (missing INTERNET permission?)) indica claramente que você não tem permissão para fazer rede. Isso é um fato bastante indiscutível. Mas como isso pode acontecer? Normalmente, é devido à falta de <uses-permission android:name="android.permission.INTERNET" />entrada em seu AndroidManifest.xmlarquivo ou, como a permissão de internet é concedida na instalação e não no tempo de execução, por bug perdido de longa data no framework Android que faz com que seu aplicativo seja instalado com sucesso, mas sem a concessão de permissão esperada.

Meu Manifesto está correto, então como isso pode acontecer?

Teoricamente, a presença de uses-permissionno Manifest atende perfeitamente ao requisito e, do ponto de vista do desenvolvedor, é tudo o que precisa ser feito para poder fazer networking. Além disso, uma vez que as permissões são mostradas ao usuário durante a instalação, o fato de seu aplicativo ter terminado instalado no dispositivo do usuário significa que ele concedeu o que você pediu (caso contrário, a instalação será cancelada), então suponha que, se seu código for executado, todas as permissões solicitadas serão concedido é válido. E, uma vez concedida, o usuário não pode revogar a permissão de outra forma que desinstalar o aplicativo completamente, já que a estrutura Android padrão (do AOSP) não oferece tal recurso no momento.

Mas as coisas estão ficando mais complicadas se você também não se importar que seu aplicativo seja executado em dispositivos com acesso root . Existem ferramentas disponíveis no Google Play que seus usuários podem instalar para controlar as permissões concedidas aos aplicativos instalados em tempo de execução - por exemplo: Permissões negadas e outros. Isso também pode ser feito com CyanogenMod , marca do fornecedor (por exemplo, LG) ou outra ROM personalizada , apresentando vários tipos de "gerenciadores de privacidade" ou ferramentas semelhantes.

Portanto, se o aplicativo for bloqueado de qualquer maneira, ele é basicamente bloqueado intencionalmente pelo usuário e, em caso afirmativo, é realmente mais um problema do usuário neste caso (ou ele / ela não entende o que certas opções / ferramentas realmente fazem e quais seriam as consequências) do que o seu, porque o SDK padrão (e a maioria dos aplicativos são escritos com esse SDK em mente) simplesmente não se comporta dessa forma. Portanto, duvido muito que esse problema ocorra em dispositivos "padrão", sem acesso root, com ROM de estoque (ou de fornecedores como Samsung, HTC, Sony, etc.).

Eu não quero bater ...

O gerenciamento de permissões e o bloqueio / org devidamente implementados devem lidar com o fato de que a maioria dos aplicativos pode não estar pronta para a situação em que o acesso a certos recursos é concedido e não acessível ao mesmo tempo, pois isso é um tipo de contradição onde o aplicativo usa o manifesto para solicitar acesso no momento da instalação. O controle de acesso feito corretamente deve fazer todas as coisas funcionarem como antes e ainda limitar a usabilidade usando técnicas no escopo do comportamento esperado do recurso. Por exemplo, quando determinada permissão é concedida (ou seja, GPS, acesso à Internet), tal recurso pode ser disponibilizado da perspectiva do aplicativo / usuário (ou seja, você pode ligar o GPS ou tentar se conectar), a implementação alterada não pode fornecer dados reais - ou seja, o GPS sempre pode retornar sem coordenadas, como quando você está em um ambiente fechado ou não tem um satélite "fixo". O acesso à Internet pode ser concedido como antes, mas você não pode fazer nenhuma conexão com sucesso, pois não há cobertura de dados ou roteamento. Esses cenários também devem ser esperados no uso normal, portanto, eles já devem ser tratados pelos aplicativos. Como isso simplesmente pode acontecer durante o uso diário normal, qualquer travamento em tal situação deve estar relacionado a bugs de aplicativo.

Faltam muitas informações sobre o ambiente no qual este problema ocorre para diagnosticar o problema sem adivinhação, mas como tipo de solução, você pode considerar o uso de setDefaultUncaughtExceptionHandler () para capturar tais exceções inesperadas no futuro e simplesmente mostrar informações detalhadas do usuário que permissão que seu aplicativo precisa em vez de apenas travar. Observe que usar isso provavelmente entrará em conflito com ferramentas como Crittercism, ACRA e outras, portanto, tome cuidado ao usar qualquer uma delas.

Notas

Esteja ciente de que android.permission.INTERNETnão é a única permissão relacionada à rede que você pode precisar declarar no manifesto para tentar fazer a rede com sucesso. Ter a INTERNETpermissão concedida simplesmente permite que os aplicativos abram sockets de rede (que é basicamente um requisito fundamental para fazer qualquer transferência de dados de rede). Mas no caso de sua pilha / biblioteca de rede também desejar obter informações sobre redes, você também precisará android.permission.ACCESS_NETWORK_STATEdo seu Manifesto (isto é, exigido pelo cliente HttpUrlConnection ( consulte o tutorial ).


Adendo (16/07/2015)

Observe que o Android 6 (também conhecido como Marshmallow) introduziu um mecanismo de gerenciamento de permissão completamente novo chamado Permissões de tempo de execução . Isso dá ao usuário mais controle sobre quais permissões são concedidas (também permite a concessão seletiva) ou permite revogar as permissões já concedidas sem a necessidade de remoção do aplicativo:

Isso introduz um novo modelo de permissões, onde os usuários agora podem gerenciar diretamente as permissões do aplicativo em tempo de execução. Este modelo oferece aos usuários visibilidade e controle aprimorados sobre as permissões, ao mesmo tempo que simplifica os processos de instalação e atualização automática para desenvolvedores de aplicativos. Os usuários podem conceder ou revogar permissões individualmente para aplicativos instalados.

No entanto, as alterações não afetam INTERNETou ACCESS_NETWORK_STATEpermissões, que são considerados permissões "normal". O usuário não precisa conceder essas permissões explicitamente.

Consulte a página de descrição de mudanças de comportamento para obter detalhes e certifique-se de que seu aplicativo também se comportará corretamente em sistemas mais novos. É especialmente importante quando seu projeto está definido targetSdkcomo pelo menos 23, pois você deve oferecer suporte a um novo modelo de permissões ( documentação detalhada ). Se você não estiver pronto, certifique-se de mantê-lo targetSdkno máximo, 22pois isso garante que até mesmo o novo Android usará o sistema de permissão antigo quando seu aplicativo for instalado.

Marcin Orlowski
fonte
Isso significa claramente que ele não tem permissão para fazer networking. Ou não é solicitado no Manifesto ou não é concedido pela plataforma (o que pode ser feito em dispositivos com acesso root).
Marcin Orlowski
2
Votei positivamente nesta resposta para desfazer a votação negativa de outra pessoa. No começo eu pensei que você realmente não leu a pergunta inteira e só queria ser rápido (a propósito, sua resposta FOI muito curta no início ;-)), mas acho que o comentário sobre os usuários (em dispositivos com root) ser capaz de frustrar seus pedidos de permissão foi bom.
baske
Mmmm então, se for de um usuário root que está removendo permissões, tenho 2 perguntas: 1) como posso saber se não tenho essa permissão? 2) Como posso perguntar de novo? (ainda, não sei se estamos falando sobre esse tipo de problema)
StErMi
Você não pode solicitá-lo novamente, porque essa permissão não é concedida em tempo de execução. Veja a resposta editada para uma possível "solução"
Marcin Orlowski
1
O mesmo aqui: eu estava prestes a fazer o downgrade, mas a segunda parte da resposta parece ser a parte que vale a pena ler :) você deve remover as primeiras linhas das respostas, pois StErMi mostrou claramente que configurou a permissão de INTERNET.
Thierry de
43

Certifique-se de que o lugar onde você adiciona

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

está certo.

Você deve escrever assim em AndroidManifest.xml:

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

Não cometa meus erros :)

valeria
fonte
33

O Android Studio 1.3b1 (não tenho certeza sobre outras versões) completou automaticamente minha permissão de internet para ANDROID.PERMISSION.INTERNET. Alterá-lo para android.permission.INTERNETcorrigir o problema.

Tom
fonte
Isso agora deve ser corrigido no Android Studio 1.4 RC 1 (atualmente no canal Canary).
Tom,
30

Adicione ao arquivo de manifesto a linha:

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

Ele consertou para mim.

Dashtank
fonte
20

Resolvi esse erro, estava adicionando permissões dentro da tag do aplicativo por engano. Eu coloquei fora e funciona bem. Espero que ajude para alguém.

Sami
fonte
16

Eu também tive esse problema. era estranho que funcionasse no meu emulador de pirulito, mas não no meu dispositivo kitkat real.

O Android Studio agora o forçará a escrever a permissão em maiúsculas e esse é o problema.

Adicionar

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

Acima da guia do aplicativo e ele funcionará.

Boldijar Paul
fonte
Esta é a resposta simples e correta. E deve ser o que está por cima!
Kostanos
13

Escreva sua permissão antes da tag do aplicativo conforme fornecido abaixo.

<?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">
arango_86
fonte
Na verdade, foi a única coisa que me ajudou :( Nem um pouco intuitivo.
Ivan Perez
4

Coloque essas permissões fora da <application>tag de preferência antes da tag, tentei e funcionou para mim.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Tobore Igbe
fonte
2

Exatamente como Tom mencionou. Quando você começar com capital A, o preenchimento automático o concluirá como.

ANDROID.PERMISSION.INTERNET

Quando você começar a digitar com a, o preenchimento automático irá completá-lo como

android.permission.INTERNET

O segundo é o correto.

Shakti
fonte
2

Passei horas procurando uma solução para esse problema e nenhuma das soluções nas respostas funcionou. Então descobri que acidentalmente adicionei um espaço durante o preenchimento automático entre android.permission.INTERNETe"

a2en
fonte
0

Bem, é um tipo de bug muito confuso. Poderia haver muitas razões:

  1. Você não está mencionando as permissões no lugar certo. Como logo acima do aplicativo.
  2. Você não está usando letras minúsculas.
  3. Em alguns casos, você também precisa adicionar permissão de estado de rede.
  4. Um que foi o meu caso, existem algumas linhas em branco nas linhas do manifesto. Como se pudesse haver uma linha em branco entre a etiqueta de permissão e a linha do aplicativo. Remova-os e pronto. Espero que ajude
Shami
fonte
-7

remova isso do seu arquivo de manifesto

 xmlns:tools="http://schemas.android.com/tools"
Jiangyongyuan
fonte
Esse código não existe no arquivo de manifesto (AndroidManifest.xml) em questão.
Pang de