这是一个场景。我的应用
我正在使用sendBroadcast(intent, permission)
方法发送我的广播,因为我只希望我的SampleBroadcastReceiver接收广播消息并阻止我应用中的其他接收者接收消息。
注意: 所有接收者都注册了相同的操作,但在广播时根据系统条件,广告将以不同的权限进行广播。
从文档中我了解到清单中需要以下内容:
需要声明<permission android:name="com.example.MYPERMISSION"
android:label="my_permission"
android:protectionLevel="normal"></permission>
在清单
让此stmt请求申请级<uses-permission android:name="com.example.MYPERMISSION"/>
的权限
问题 -
我是如何仅为应用中的特定组件请求权限而不是应用级权限请求?例如。 SampleBroadcastReceiver(见下面的代码)。有可能吗?*
<android-permission>
标签的目的是什么,可用于所有个人组件?它能满足我的目的吗?
AndroidManifest
.........
<activity
android:name="com.example.activities.BroadcastSenderActivity"
android:label="BroadcastSenderActivity"
android:theme="@android:style/Theme.Light" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- ************************************** RECEIVER ******************************************* -->
<receiver android:name="com.example.broadcastTest.SampleBroadcastReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.example.ACTION_BROADCAST_SEND" />
</intent-filter>
</receiver>
<receiver android:name="com.example.broadcastTest.BroadcastReceiver_1"
android:exported="false">
<intent-filter>
<action android:name="com.example.ACTION_BROADCAST_SEND" />
</intent-filter>
</receiver>
<receiver android:name="com.example.broadcastTest.BroadcastReceiver_2"
android:exported="false">
<intent-filter>
<action android:name="com.example.ACTION_BROADCAST_SEND" />
</intent-filter>
</receiver>
public class BroadcastSenderActivity extends Activity {
public BroadcastSenderActivity() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(Logger.TAG, "BroadcastSenderActivity - onCreate");
setContentView(R.layout.broadcast_tester);
Button btn = (Button)findViewById(R.id.sendBroadcastBtn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent broadcastIntent = new Intent();
Log.d(Logger.TAG, "BroadcastSenderActivity - sending the broadcast");
broadcastIntent.setAction(com.example.ACTION_BROADCAST_SEND);
BroadcastSenderActivity.this.sendBroadcast(broadcastIntent, com.example.MYPERMISSION);
答案 0 :(得分:6)
您可以使用特定权限保护每个单独的组件。这是android:permission="..."
属性,可以单独应用于每个组件。这允许您需要不同的权限,例如,启动特定的Activity
,启动特定的Service
或使用特定的BroadcastReceiver
。此属性表示应用程序需要保留指定的权限才能使用特定组件。
应用拥有一组权限。 <uses-permission>
标记在清单中请求这些权限。当应用程序安装时,将向用户显示此列表,并在安装时为应用程序授予这些权限 。
发送广播时,通常所有已安装和/或已注册的BroadcastReceiver
都能看到此广播。使用方法sendBroadcast(intent, permission)
时,permission
参数用于控制哪些接收器能够看到广播。但是,此权限检查也是在应用程序级别完成的。这意味着,如果应用程序已被授予指定权限,则该应用程序的所有BroadcastReceiver
将能够看到广播。
因此,使用Android权限机制无法实现您的目标。由于应用程序具有或没有特定权限,因此您无法对特定应用程序可以使用哪些组件进行细粒度控制。
希望这能回答你的问题。
编辑:替代建议:
由于这都在一个应用程序中,您应该能够自己管理它。就个人而言,我认为使用Android权限框架是有点过分的。您只需向广播Intent
添加适当的额外,然后将其用于控制对接收者的访问。或者,您可以定义2个不同的Intent
操作,并使用它来控制访问。