Como adicionar permissão de manifesto a um aplicativo?

428

Estou tentando acessar o link HTTP usando HttpURLConnectionno Android para baixar um arquivo, mas estou recebendo este aviso em LogCat:

WARN / System.err (223): java.net.SocketException: permissão negada (talvez esteja faltando a permissão da INTERNET)

Eu adicionei android.Manifest.permissionao meu aplicativo, mas ele ainda está dando a mesma exceção.

roubar
fonte
Cole o conteúdo da permissão de manifesto. Você concedeu permissões para a INTERNET?
Anthony Forloney
eu adicionei import android.Manifest.permission; para app, nada mais. O que mais eu preciso adicionar para conceder permissões
rob
2
Olhe para a minha resposta abaixo e ver se isso ajuda, e eu não tenho idéia do que import android.Manifest.permissionvai fazer para você se você não tiver o Internet conjunto de permissões no arquivo AndroidManifest.xml
Anthony Forloney

Respostas:

935

Supondo que você não tenha permissões definidas na LogCatdescrição do erro, eis o meu conteúdo para o meu AndroidManifest.xmlarquivo que tem acesso à Internet:

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

Fora isso, você deve baixar um arquivo da Internet.

Anthony Forloney
fonte
3
Se você encontrar respostas que resolvam sua pergunta ou pareçam úteis, é útil selecionar como "respondidas" e / ou votadas, isso ajuda a comunidade para qualquer pessoa que encontre os mesmos problemas. Isso não é apenas direcionado a esta pergunta, mas a outras perguntas que você também fez.
Anthony Forloney
eu não sabia sobre isso, eu vou fazer isso com certeza se isso vai resolver o meu problema
Rob
informe se encontrar algo diferente e terei todo o gosto em ajudar.
Anthony Forloney
1
No meu caso, tive que me certificar de que era a PRIMEIRA linha após a declaração do manifesto .. em qualquer lugar abaixo disso e não funcionaria. v2.2, api nível 8, htc g1
slf
1
@dialex AFAIK, não há nenhum elemento filho uses-permissiondentro da applicationtag, apenas o manifest.
Anthony Forloney
73

O nome da permissão é SENSÍVEL EM CASO

Caso alguém lute com o mesmo problema, ele faz distinção entre maiúsculas e minúsculas declaração que . Caso errado, seu aplicativo não receberá a permissão.

ERRADO

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

CORRIGIR

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

Este problema pode acontecer, ie. no preenchimento automático no IDE

Marek Sebera
fonte
1
Obrigado! Eu perdi meu dia inteiro me perguntando por que meu aplicativo não estava funcionando. Eu sou novo para o estúdio android e esta questão não ocorreu em Eclipse antes :)
InspiredCoder
1
E eu perdi todo o meu dia para descobrir o que é realmente diferença entre eles, OMG sua Capital e pequeno ANDROID.PERMISSION e 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>
Teraiya Mayur
fonte
34

Se você estiver usando o plug-in Eclipse ADT para o seu desenvolvimento, abra AndroidManifest.xmlno Android Manifest Editor (deve ser a ação padrão para abrir AndroidManifest.xmlna lista de arquivos do projeto).

Depois, selecione a Permissionsguia na parte inferior do editor ( Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml), clique em Add...a Uses Permissione selecione a permissão desejada no menu suspenso à direita ou apenas copie e cole na necessária (como a android.permission.INTERNETpermissão que você solicitou).

Chris
fonte
23

Copie a seguinte linha no arquivo de manifesto do aplicativo e cole antes da <application> tag.

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

A colocação da permissão abaixo da <application/>tag funcionará, mas será avisado. Portanto, tome cuidado para colocá-lo antes da <application/>declaração da tag.

nitesh
fonte
No momento da redação deste comentário, ele fica fora do elemento de aplicativo, mas dentro do manifesto. por exemplo: <application> ... </ application> <usos-permissão Android: name = "android.permission.INTERNET" /> </ manifest>
Steve Swinsburg
12

Ao usar o eclipse, siga estas etapas

1) Clique duas vezes no manifesto para mostrá-lo no editor
2) Clique na guia de permissões abaixo do editor de manifesto
3) Clique no botão Adicionar
4) na caixa de diálogo exibida Clique em usa permissão. (Geralmente, o último item da lista)
5) Observe a exibição que aparece no lado direito. Selecione "android.permission.INTERNET"
6) Em seguida, faça uma série de Ok e, finalmente, salve.

Espero que isto ajude

Mathayo
fonte
7

Estou atrasado, mas quero completar a resposta.

Uma permissão é adicionada manifest.xmlcomo

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

Isso é suficiente para permissões padrão, nas quais nenhuma permissão é solicitada ao usuário. No entanto, não basta adicionar permissão apenas para manifestar se é uma permissão perigosa. Veja doc android . Como câmera, permissões de armazenamento.

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

Você precisará pedir permissão ao usuário . Eu uso a biblioteca RxPermission , que é amplamente usada para pedir permissão. Porque é um código longo que precisamos escrever para pedir permissão.

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
        }
    });

Adicione esta biblioteca ao seu aplicativo

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}
Khemraj
fonte
4

Isso também pode ser interessante no contexto da adição de permissão INTERNET ao seu aplicativo:

O Google também concedeu acesso a Internet para cada aplicativo, removendo efetivamente a permissão de acesso à Internet. Ah, claro, os desenvolvedores do Android ainda precisam declarar que desejam acesso à Internet ao montar o aplicativo. Porém, os usuários não podem mais ver a permissão de acesso à Internet ao instalar um aplicativo, e os aplicativos atuais que não têm acesso à Internet agora podem obter acesso à Internet com uma atualização automática sem avisar.

Fonte: http://www.howtogeek.com/190863/androids-app-permissions-were-just-simplified-now-theyre-much-less-secure/

O ponto principal é que você ainda precisa adicionar a permissão INTERNET no arquivo de manifesto, mas o aplicativo será atualizado nos dispositivos do usuário sem solicitar nova permissão.

lenrok258
fonte
-1

Você precisa usar o estado da rede e o acesso à rede no arquivo de manifesto enquanto tenta carregar ou acessar a Internet através do emulador do Android.

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

Se você estiver dando apenas permissão .INTERNET, ele não acessará a Internet.

zemunkh
fonte