web-dev-qa-db-fra.com

Comment définir les autorisations dans l'expéditeur et le récepteur de diffusion dans android

Comment pouvons-nous spécifier dans l'application d'envoi de diffusion quelle application peut recevoir cette diffusion, et dans la réception de l'application que l'application particulière a la permission d'envoyer la diffusion à son récepteur de diffusion ...

Je suis nouveau sur Android .. J'ai lu la documentation, etc. sur Internet, mais je n'ai pas trouvé la syntaxe pour spécifier ces autorisations.

26
blackfyre

utiliser un filtre d'intention dans la balise du récepteur dans le manifeste

 <receiver
    Android:name="Your receiver"
    Android:enabled="true"
    Android:exported="false" >
    <intent-filter>
        <action Android:name="action"/>
        <category Android:name="category" />
    </intent-filter>
</receiver>

Pour envoyer une diffusion vers l'application

   Intent intent = new Intent();
   intent.setAction("use same action in receiver");
   intent.addcategory("use same category in receiver");
   context.sendBroadcast(intent); 
2
Vishwanath.M

Pour contrôler qui peut recevoir le message de diffusion, vous pouvez utiliser la méthode sendBroadcast :

public abstract void sendBroadcast (Intent intent, String receiverPermission)

où vous précisez le nom de l'autorisation requise. Si le destinataire ne déclare pas cette autorisation, il ne pourra pas recevoir le message. Par exemple, l'expéditeur de diffusion peut faire:

Intent broadcast = new Intent(this, MyBroadcastReceiver.class);
sendBroadcast(broadcast, "andro.jf.mypermission");

Dans le manifeste de l'expéditeur de la diffusion, une nouvelle autorisation doit être déclarée:

<!--  Declaring the special permission -->
<permission Android:name="andro.jf.mypermission" 
        Android:label="my_permission" 
        Android:protectionLevel="dangerous"></permission>

Ensuite, dans l'application qui est censée recevoir cette diffusion, vous devez déclarer cette autorisation et dire que vous l'utilisez. Dans le manifeste, vous pouvez ajouter:

<!--  I use the permission ! -->
<uses-permission Android:name="andro.jf.mypermission"/>

et bien sûr, vous devez déclarer votre récepteur de diffusion:

<receiver Android:name="MyBroadcastReceiver" Android:exported="true" />

Vous pouvez jeter un oeil à cet article pour un exemple complet d'une autorisation personnalisée et aussi page développeur Android à ce sujet. Attention à l'ordre d'installation de vos applications car celui qui définit l'autorisation doit être installé en premier .

76
JFL

Si vous souhaitez restreindre les personnes autorisées à envoyer des intentions à votre récepteur de diffusion, procédez comme suit:

L'émission récepteur:

<manifest ...>

    <!-- Permission declaration -->
    <permission Android:name="my.app.PERMISSION" />

    <receiver 
        Android:name="my.app.BroadcastReceiver"
        Android:permission="my.app.PERMISSION"> <!-- Permission enforcement for delivering intents to this receiver -->
        <intent-filter>
            <action Android:name="my.app.Action" />
        </intent-filter>
    </receiver>

    ...
</manifest>

L'émission expéditeur:

<manifest ...>
    <!-- We declare we own the permission to send broadcast to the above receiver -->
    <uses-permission Android:name="my.app.PERMISSION" />

    ...
</manifest>

Envoi de la diffusion de l'activité expéditeur au récepteur:

Intent intent = new Intent();
intent.setAction("my.app.Action");
activity.sendBroadcast(intent);

Si vous déclarez l'autorisation comme ceci:

<permission Android:protectionLevel="signature" Android:name="my.app.PERMISSION" />

Ensuite, l'expéditeur pourra utiliser cette autorisation et envoyer des émissions au récepteur uniquement lorsque les applications expéditeur et récepteur sont signées par le même certificat de développeur.

38
petrsyn

Déclarer la permission

Vous devez d'abord déclarer votre autorisation dans votre AndroidManifest.xml

<permission Android:name="YOUR_PERMISSION_STRING" Android:protectionLevel="signature"/>
<uses-permission Android:name="com.codylab.photogallery.PRIVATE"/>

the Android:name la valeur est utilisée comme valeur d'autorisation et sera utilisée plus tard.

Usage

Il existe deux types d'utilisations des autorisations liées au récepteur de diffusion:

(1) Contrôlez quelle application peut recevoir votre diffusion:

String PERMISSION_STRING_PRIVATE_RECEIVER = "YOU_NEED_THIS_TO_RECEIVE_THIS_BROADCAST"
sendBroadcast(intent, PERMISSION_STRING_PRIVATE_RECEIVER);

Avec cette utilisation, vous pouvez contrôler que seule l'application autorisée peut gérer la diffusion que vous avez envoyée.

(2) Seuls les diffusions ont l'autorisation spécifiée

String PERMISSION_STRING_PRIVATE_BROADCASTER = "ONLY HANDLE BROADCASTS WITH THIS PERMISSION"
IntentFilter filter = new IntentFilter(ACTION_SAMPLE);
registerReceiver(mReceiver, filter, PERMISSION_STRING_PRIVATE_BROADCASTER, null);

Avec cette utilisation, vous pouvez vous assurer que le diffuseur est autorisé.

7
Cody

Après une demi-journée de recherche et de test, sur la base de la réponse de @ JFL, je trouve que l'application expéditeur doit ajouter les deux <permission> tag et <uses-permission> tag, le récepteur peut recevoir la diffusion avec autorisation. Sinon, l'application réceptrice ne recevra pas la diffusion.

2
Swifty