web-dev-qa-db-ja.com

androidでブロードキャスト送信者と受信者にアクセス許可を設定する方法

ブロードキャスト送信アプリケーションで、どのアプリケーションがこのブロードキャストを受信できるか、および受信アプリケーションで、どのアプリケーションがブロードキャストをそのブロードキャストレシーバーに送信する許可を持っているかを指定するにはどうすればよいですか...

私はAndroidを初めて使用します。インターネットでドキュメントなどを読みましたが、これらのアクセス許可を指定する構文が見つかりませんでした。

26
blackfyre

マニフェストの受信者タグでインテントフィルターを使用する

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

アプリにブロードキャストを送信するには

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

誰がブロードキャストメッセージを受信できるかを制御するには、メソッド sendBroadcast を使用できます。

public abstract void sendBroadcast (Intent intent, String receiverPermission)

ここで、必要な許可の名前を正確に指定します。受信者がこの許可を宣言しない場合、メッセージを取得できません。たとえば、ブロードキャスト送信者は次のことができます。

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

ブロードキャスト送信者のマニフェストで、新しい許可を宣言する必要があります。

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

次に、このブロードキャストを受信することになっているアプリケーションで、この許可を宣言し、それを使用することを宣言する必要があります。マニフェストに追加できるもの:

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

そしてもちろん、ブロードキャストレシーバーを宣言する必要があります。

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

カスタム許可の完全な例については this post を、またこれについては Android開発者ページ をご覧ください。アプリのインストール順序に注意してください。許可を定義するものは 最初にインストールする必要があります です。

76
JFL

ブロードキャストレシーバーにのみインテントを送信できるユーザーを制限する場合は、次のようにします。

ブロードキャスト受信者

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

ブロードキャスト送信者

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

    ...
</manifest>

送信者アクティビティから受信者にブロードキャストを送信する:

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

このような許可を宣言する場合:

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

次に、senderは、この許可を使用して、senderreceiverアプリの両方が同じ署名されている場合にのみ、ブロードキャストをレシーバーに送信できます。開発者証明書。

38
petrsyn

許可を宣言する

まず、AndroidManifest.xmlで許可を宣言する必要があります

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

the Android:name値は許可値として使用され、後で使用されます。

使用法

ブロードキャストレシーバーに関連する2種類のアクセス許可の使用法があります。

(1)ブロードキャストを受信できるアプリケーションを制御します。

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

この使用法では、送信したブロードキャストを処理できるのは許可されたアプリケーションのみです。

(2)指定された権限を持つブロードキャストのみを処理します

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

この使用法を使用すると、ブロードキャスターが許可されていることを確認できます。

7
Cody

@JFLの回答に基づいて半日の検索とテストを行った後、送信者アプリに両方を追加する必要があることがわかりました<permission>タグと<uses-permission>タグの場合、受信者は許可を得てブロードキャストを受信できます。そうしないと、受信アプリはブロードキャストを受信しません。

2
Swifty