J'ai créé un service lié à d'autres applications via AIDL et je l'ajoute au manifeste comme suit:
<service Android:name=".MyService">
<intent-filter>
<action Android:name="org.example.Android.myservicedemo.IService" />
</intent-filter>
</service>
où IService est l'interface AIDL.
De cette manière, Eclipse me montre l’avertissement Le service exporté ne nécessite pas d’autorisation. Si je supprime le intent-filter
, l'avertissement disparaît, mais il est évident que les applications ne peuvent pas se lier au service.
Que signifie cet avertissement?
J'ai eu le même problème lorsque j'ai mis à jour le SDK vers la version 20 . Je l'ai supprimé en ajoutant Android: propriété exportée Android:exported="false"
ainsi:
<service Android:name=".MyService"
Android:exported="false">
<intent-filter>
<action Android:name="org.example.Android.myservicedemo.IService" />
</intent-filter>
</service>
Voir ceci doc
Si vous souhaitez limiter votre activité à votre propre application, vous devez ajouter exported=false
à la déclaration du manifeste de votre activité.
Si vous souhaitez autoriser d'autres applications à l'utiliser (explicitement via son nom de classe ou, mieux, en utilisant une intention avec un type de données ou une action), vous avez le choix entre:
tools:ignore="ExportedActivity"
à la déclaration du manifeste de votre activité.-
Le même raisonnement s’applique à un service, avec tools:ignore="ExportedService"
et les fournisseurs de contenu avec tools:ignore="ExportedContentProvider"
.
Comme Jens a déclaré: "Cela signifie que les autres applications (arbitraires) de l'utilisateur sur son téléphone peuvent se lier à votre service et appeler la méthode de leur choix qui est exposée via votre interface AIDL."