36 votes

"L'activité exportée ne nécessite pas d'autorisation" lors d'une tentative de lancement à partir d'un URI

J'essaie de lancer une application Android à partir d'un URI en utilisant la fonction cette question SO comme référence.

J'ai un fichier manifeste avec l'activité déclarée suivante :

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="http" android:host="example.com" />
    </intent-filter>
</activity>

Je tente de lancer MainActivity avec l'option http://example.com lien. Mon problème est que je reçois l'avertissement

"exported activity does not require permission"

J'ai examiné d'autres questions de SO qui signalent ce même avertissement et toutes les solutions ne semblent pas fonctionner.

Comment écrire correctement le filtre d'intention de l'activité pour éviter l'avertissement ?

Merci

91voto

Shine Points 2005

J'ai eu le même problème quand j'ai mise à jour du SDK à la version 20 . Je l'ai enlevé en ajoutant Android:exporté propriété :

<activity 
  android:name=".MainActivity"
  android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="http" android:host="example.com" />
    </intent-filter>
</activity>

dans la déclaration de l'activité dans le manifeste. Bien entendu, vous pouvez le spécifier si l'activité est destinée uniquement à un usage interne à l'application.

La raison pour laquelle elle le fixe se trouve sur docs :

Android:exporté :La valeur par défaut dépend du fait que l'activité contient ou non des filtres d'intention. L'absence de filtres signifie que l'activité ne peut être invoquée qu'en spécifiant son nom de classe exact. Cela implique que l'activité est destinée uniquement à un usage interne à l'application (puisque les autres ne connaîtraient pas le nom de la classe). Dans ce cas, la valeur par défaut est donc "false". D'un autre côté, la présence d'au moins un filtre implique que l'activité est destinée à un usage externe, la valeur par défaut est donc "true". .

Desde "Le récepteur exporté ne nécessite pas de permission" (au moins le message LINT est clair) ,vous avez compris.

40voto

cleroo Points 525

Avez-vous essayé de nettoyer votre projet (Project > Clean ...) ? Cela a corrigé cet avertissement pour mon projet, peut-être le vôtre.

18voto

white_gecko Points 1362

Pour vous débarrasser de cet avertissement, vous avez deux possibilités :

  • Soit vous définissez l'attribut android:exported="false" sur l'activité pour empêcher d'autres applications d'appeler votre activité par le biais d'une intention
  • Ou si autoriser d'autres applications à appeler votre activité est ce que vous voulez, vous devez ajouter un android:permission où vous pouvez spécifier les autorisations qu'une application doit avoir afin d'appeler votre activité.
  • Si vous voulez permettre à d'autres applications d'appeler votre activité sans permission spéciale, vous devez vous accommoder d'un avertissement dans le manifeste.

Vous pouvez obtenir de plus amples informations dans le Documentation Android .

Merci à @furykid pour les liens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X