Comment ajouter une autorisation manifeste à une application?

428

J'essaie d'accéder au lien HTTP à l'aide HttpURLConnectiond'Android pour télécharger un fichier, mais je reçois cet avertissement dans LogCat:

WARN / System.err (223): java.net.SocketException: autorisation refusée (autorisation INTERNET peut-être manquante)

J'ai ajouté android.Manifest.permissionà ma demande, mais elle donne toujours la même exception.

Rob
la source
Collez le contenu de votre autorisation manifeste, avez-vous accordé des autorisations pour INTERNET?
Anthony Forloney
j'ai ajouté import android.Manifest.permission; à l'application, rien d'autre. Que dois-je ajouter pour accorder des autorisations
vol
2
Regardez ma réponse ci-dessous et voyez si cela aide, et je n'ai aucune idée de ce que import android.Manifest.permissioncela fera pour vous si vous n'avez pas l'autorisation INTERNET définie dans le fichier AndroidManifest.xml
Anthony Forloney

Réponses:

935

En supposant que vous n'avez pas défini d'autorisations à partir de votre LogCatdescription d'erreur, voici le contenu de mon AndroidManifest.xmlfichier qui a accès à Internet:

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

En dehors de cela, vous devriez pouvoir télécharger un fichier sur Internet.

Anthony Forloney
la source
3
Si vous trouvez des réponses qui résolvent votre question ou semblent utiles, qu'il est utile de sélectionner comme «répondues» et / ou de voter positivement, cela aide la communauté pour toute personne rencontrant les mêmes problèmes. Ce n'est pas seulement dirigé vers cette question, mais d'autres questions que vous avez également posées
Anthony Forloney
je ne le savais pas, je le ferai à coup sûr si cela résoudra mon problème
vol
signalez si vous rencontrez quelque chose de différent et je serai plus qu'heureux de vous aider.
Anthony Forloney
1
Dans mon cas, je devais m'assurer que c'était la TRÈS PREMIÈRE ligne après la déclaration manifeste .. n'importe où en dessous et cela ne fonctionnerait pas. v2.2, api niveau 8, htc g1
slf
1
@dialex AFAIK, il n'y a aucun élément enfant uses-permissionà l'intérieur de la applicationbalise, seulement le manifest.
Anthony Forloney
73

Le nom de l'autorisation est SENSIBLE À LA CASE

Dans le cas où quelqu'un aurait du mal avec le même problème, il s'agit d'une déclaration sensible à la casse , donc une mauvaise casse signifie que votre application n'obtiendra pas l'autorisation.

FAUX

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

CORRECT

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

Ce problème peut se produire, par exemple. sur la saisie semi-automatique dans IDE

Marek Sebera
la source
1
Je vous remercie! J'ai perdu toute ma journée à me demander pourquoi mon application ne fonctionnait pas. Je suis nouveau dans le studio Android et ce problème ne s'est pas produit auparavant dans Eclipse :)
InspiredCoder
1
Et j'ai perdu toute ma journée à comprendre ce qui fait vraiment la différence entre eux, OMG sa capitale et Small ANDROID.PERMISSION et 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
la source
34

Si vous utilisez le plugin Eclipse ADT pour votre développement, ouvrez-le AndroidManifest.xmldans l'éditeur de manifeste Android (devrait être l'action par défaut pour l'ouverture à AndroidManifest.xmlpartir de la liste des fichiers du projet).

Ensuite, sélectionnez le Permissions onglet en bas de l'éditeur ( Manifest - Application - Permissions - Instrumentation - AndroidManifest.xml), puis cliquez sur Add...a Uses Permissionet sélectionnez l'autorisation souhaitée dans la liste déroulante à droite, ou copiez-collez simplement celle qui est nécessaire (telle que l' android.permission.INTERNETautorisation dont vous avez besoin).

Chris
la source
23

Copiez la ligne suivante dans votre fichier manifeste d'application et collez-la avant la <application> balise.

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

Placer l'autorisation sous la <application/>balise fonctionnera, mais vous avertira. Veillez donc à le placer avant la <application/>déclaration de la balise.

nitesh
la source
Au moment d'écrire ce commentaire, il va en dehors de l'élément d'application mais dans le manifeste. par exemple: <application> ... </application> <uses-permission android: name = "android.permission.INTERNET" /> </manifest>
Steve Swinsburg
12

Lorsque vous utilisez eclipse, procédez comme suit

1) Double-cliquez sur le manifeste pour l'afficher dans l'éditeur
2) Cliquez sur l'onglet des autorisations sous l'éditeur de manifeste
3) Cliquez sur le bouton Ajouter
4) dans la boîte de dialogue qui s'affiche Cliquez sur utilise l'autorisation. (Généralement, le dernier élément de la liste)
5) Remarquez la vue qui apparaît sur le côté droit Sélectionnez "android.permission.INTERNET"
6) Puis une série d'Ok et enfin enregistrez.

J'espère que cela t'aides

Mathayo
la source
7

Je suis en retard mais je veux compléter la réponse.

Une autorisation est ajoutée dans manifest.xmlcomme

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

Cela suffit pour les autorisations standard lorsqu'aucune autorisation n'est demandée à l'utilisateur. Cependant, il ne suffit pas d'ajouter une autorisation pour se manifester uniquement s'il s'agit d'une autorisation dangereuse. Voir le doc android . Comme la caméra, les autorisations de stockage.

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

Vous devrez demander la permission à l'utilisateur . J'utilise RxPermission bibliothèque qui est une bibliothèque largement utilisée pour demander la permission. Parce que c'est du code long que nous devons écrire pour demander la permission.

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

Ajoutez cette bibliothèque à votre application

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
la source
4

Cela peut également être intéressant dans le contexte de l'ajout d'une autorisation INTERNET à votre application:

Google a également donné à chaque application un accès Internet, supprimant ainsi l'autorisation d'accès à Internet. Oh, bien sûr, les développeurs Android doivent toujours déclarer qu'ils veulent accéder à Internet lors de la création de l'application. Mais les utilisateurs ne peuvent plus voir l'autorisation d'accès à Internet lors de l'installation d'une application et les applications actuelles qui n'ont pas accès à Internet peuvent désormais accéder à Internet avec une mise à jour automatique sans vous en informer.

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

En fin de compte, vous devez toujours ajouter l'autorisation INTERNET dans le fichier manifeste, mais l'application sera mise à jour sur les appareils de l'utilisateur sans lui demander de nouvelle autorisation.

lenrok258
la source
-1

Vous devez utiliser à la fois le réseau et l'état du réseau d'accès dans le fichier manifeste pendant que vous essayez de charger ou d'accéder à Internet via l'émulateur Android.

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

Si vous accordez uniquement l'autorisation .INTERNET, il n'accédera pas à Internet.

zemunkh
la source