¿Cómo agregar permisos de manifiesto a una aplicación?

428

Estoy tratando de acceder al enlace HTTP usando HttpURLConnectionAndroid para descargar un archivo, pero recibo esta advertencia en LogCat:

WARN / System.err (223): java.net.SocketException: Permiso denegado (quizás falta el permiso de INTERNET)

He agregado android.Manifest.permissiona mi aplicación pero sigue dando la misma excepción.

robar
fuente
Pegue su contenido de permiso de manifiesto, ¿concedió permisos para INTERNET?
Anthony Forloney
agregué import android.Manifest.permission; a la aplicación, nada más. ¿Qué más necesito agregar para otorgar permisos
Robar el
2
Mire mi respuesta a continuación y vea si eso ayuda, y no tengo idea de qué import android.Manifest.permissionhará por usted si no tiene permiso de INTERNET configurado en el archivo AndroidManifest.xml
Anthony Forloney

Respuestas:

935

Suponiendo que no tiene permisos establecidos en su LogCatdescripción de error, aquí está mi contenido para mi AndroidManifest.xmlarchivo que tiene acceso a Internet:

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

Aparte de eso, debería estar bien para descargar un archivo de Internet.

Anthony Forloney
fuente
3
Si encuentra respuestas que resuelven su pregunta o parecen útiles, es útil seleccionarlas como "respondidas" y / o votar, ayuda a la comunidad a cualquiera que encuentre los mismos problemas. Eso no solo se dirige a esta pregunta, sino también a otras preguntas que usted ha formulado
Anthony Forloney el
no lo sabía, lo haré con seguridad si esto resuelve mi problema
robe el
informe si encuentra algo diferente y estaré más que feliz de ayudarlo.
Anthony Forloney
1
En mi caso, tuve que asegurarme de que era la PRIMERA línea después de la declaración de manifiesto ... en cualquier lugar debajo de eso y no funcionaría. v2.2, api nivel 8, htc g1
slf
1
@dialex AFAIK, no hay ningún elemento hijo uses-permissiondentro de la applicationetiqueta, solo el manifest.
Anthony Forloney
73

El nombre del permiso es SENSIBLE AL CASO

En caso de que alguien tenga problemas con el mismo problema, es una declaración sensible a mayúsculas y minúsculas , por lo que un caso incorrecto significa que su aplicación no obtendrá el permiso.

INCORRECTO

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

CORRECTO

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

Este problema puede suceder, es decir. en autocompletar en IDE

Marek Sebera
fuente
1
¡Gracias! Perdí todo el día preguntándome por qué mi aplicación no funcionaba. Soy nuevo en Android Studio y este problema no ocurrió en Eclipse antes :)
InspiredCoder
1
Y perdí todo el día averiguando qué es realmente la diferencia entre ellos, OMG es Capital y Small ANDROID.PERMISSION y 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
fuente
34

Si está utilizando el complemento ADT de Eclipse para su desarrollo, ábralo AndroidManifest.xmlen el Editor de manifiesto de Android (debería ser la acción predeterminada para abrir AndroidManifest.xmldesde la lista de archivos del proyecto).

Luego, seleccione la Permissionspestaña en la parte inferior del editor (Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml ), luego haga clic Add...en Uses Permissionay seleccione el permiso deseado en el menú desplegable de la derecha, o simplemente copie y pegue en el necesario (como el android.permission.INTERNETpermiso que solicitó).

Chris
fuente
23

Copie la siguiente línea en el archivo de manifiesto de su aplicación y péguelo antes de la <application> etiqueta.

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

Colocar el permiso debajo de la <application/>etiqueta funcionará, pero le dará una advertencia. Así que tenga cuidado de colocarlo antes de la <application/>declaración de etiqueta.

nitesh
fuente
Al escribir este comentario, va fuera del elemento de aplicación pero dentro del manifiesto. por ejemplo: <aplicación> ... </ aplicación> <usa-permiso android: name = "android.permission.INTERNET" /> </manifest>
Steve Swinsburg
12

Cuando use eclipse, siga estos pasos

1) Haga doble clic en el manifiesto para mostrarlo en el editor
2) Haga clic en la pestaña de permisos debajo del editor de manifiesto
3) Haga clic en el botón Agregar
4) en el cuadro de diálogo que aparece Haga clic en permiso. (Por lo general, el último elemento de la lista)
5) Observe la vista que aparece en el lado derecho Seleccione "android.permission.INTERNET"
6) Luego una serie de Ok y finalmente guarde.

Espero que esto ayude

Mathayo
fuente
7

Llego tarde pero quiero completar la respuesta.

Se agrega un permiso en manifest.xmllike

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

Esto es suficiente para los permisos estándar donde no se solicita permiso al usuario. Sin embargo, no es suficiente agregar permiso solo para manifestar si es un permiso peligroso. Ver documento de Android . Como cámara, permisos de almacenamiento.

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

Deberá pedir permiso al usuario . Yo uso RxPermission biblioteca que se utiliza ampliamente biblioteca para pedir permiso. Porque es un código largo que tenemos que escribir para pedir permiso.

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

Agrega esta biblioteca a tu aplicación

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
fuente
4

Eso también puede ser interesante en el contexto de agregar permiso de INTERNET a su aplicación:

Google también ha dado a cada aplicación acceso a Internet, eliminando efectivamente el permiso de acceso a Internet. Ah, claro, los desarrolladores de Android todavía tienen que declarar que quieren acceso a Internet al armar la aplicación. Pero los usuarios ya no pueden ver el permiso de acceso a Internet cuando instalan una aplicación y las aplicaciones actuales que no tienen acceso a Internet ahora pueden obtener acceso a Internet con una actualización automática sin avisarle.

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

La conclusión es que aún debe agregar el permiso de INTERNET en el archivo de manifiesto, pero la aplicación se actualizará en los dispositivos del usuario sin pedirles un nuevo permiso.

lenrok258
fuente
-1

Debe usar tanto la red como el estado de la red de acceso en el archivo de manifiesto mientras intenta cargar o acceder a Internet a través del emulador de Android.

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

Si solo otorga permiso .INTERNET, no tendrá acceso a Internet.

zemunkh
fuente