从特定应用限制Android广播接收器

时间:2012-03-02 05:45:38

标签: android broadcastreceiver android-permissions

我有2个申请 如果我使用服务,我可以设置权限,因此只有app1可以向app2发送意图:
app2protection level: signature)中定义权限,以及 在app1中使用该权限 app2中的服务受该权限保护 这样,只有app1可以向app2上的服务发送意图, 没有其他应用程序(除非我的签名被泄露)可以发送意图 app2上的服务。

我可以对广播接收器做同样的事吗?

  • app1:sendBroadcast(意图,权限)
  • app2:定义权限,使用该权限。

根据我的理解,使用sendBroadcast(意图,权限), 应用程序不需要"使用"许可。含义任何应用 可以向app2发送意图。仅检查这些权限参数 app2,以避免其他应用程序接收此意图。 (如果我删除app2,并使用相同的权限字符串安装假app2  已定义,假app2可以从app1获得意图,这是意外的)

BTW,如果应用程序定义权限并自己使用它,那么  protectionLevel(签名)似乎毫无意义。这是真的吗?

现在,我可以设置其他权限:

  • app1:定义权限,使用该权限。
  • app2:接收方仅限于该权限。

同样,如果删除app1,请使用相同的假app1进行安装 权限,然后假app1可以向app2发送虚假意图。 我该怎么做才能防止app2收到虚假意图?

由于

1 个答案:

答案 0 :(得分:5)

标签还可以定义广播机构应具有的权限,请参阅http://developer.android.com/guide/topics/manifest/receiver-element.html#prmsn

我的意思是您可以通过以下编码保护您的接收器免受未经授权的广播:

...
<permission android:name="com.yourapp.PERMISSION"
    android:protectionLevel="signature"
        android:label="@string/permission_label"
        android:description="@string/permission_desc">
</permission>
...

<receiver android:name=".MyReceiver"
    android:permission="com.yourapp.PERMISSION">
    <intent-filter>
        <action android:name="com.yourapp.ACTION" />
    </intent-filter>
</receiver>
...