这是一个场景.我的应用有
BroadcastSenderActivity
SampleBroadcastReceiver
我正在使用该sendBroadcast(intent, permission)
方法发送我的广播,因为我只希望我的SampleBroadcastReceiver接收广播消息并阻止我的应用程序中的其他接收者接收消息.
注意:所有接收者都注册了相同的操作,但在广播时根据系统条件,消息将以不同的权限进行广播.
从文档中我了解到我需要清单中的以下内容:
需要
在清单中声明
请求此stmt请求应用级别的权限
问题 -
而不是应用级权限请求如何仅为我的应用中的特定组件请求权限?例如.SampleBroadcastReceiver(见下面的代码).可能吗?*
标签的目的是什么,可用于所有个别组件?它能满足我的目的吗?
AndroidManifest
.........
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);
David Wasser.. 6
您可以使用特定权限保护每个单独的组件.这是android:permission="..."
可以单独应用于每个组件的属性.这允许您需要不同的权限,例如,启动特定的Activity
,启动特定的Service
或使用特定的BroadcastReceiver
.此属性指示应用程序需要保留指定的权限才能使用特定组件.
一个应用程序拥有一组权限.
标签在清单中请求这些权限.在应用时,用户显示该列表安装和应用程序被授予这些权限在安装时.
发送广播时,通常所有已安装和/或已注册BroadcastReceiver
的广播都能看到此广播.使用该方法时,sendBroadcast(intent, permission)
该permission
参数用于控制哪些接收器能够看到广播.但是,此权限检查也在应用程序级别完成.这意味着如果应用程序已被授予指定的权限,那么该应用程序的所有内容BroadcastReceiver
都将能够看到广播.
因此,使用Android权限机制无法实现您的目标.由于应用程序具有或没有特定权限,因此您无法对特定应用程序可以使用的组件进行细粒度控制.
希望这能回答你的问题.
编辑:替代建议:
由于这都在一个应用程序中,您应该能够自己管理它.就个人而言,我认为使用Android权限框架是有点过分的.您可以在广播中添加适当的额外内容,Intent
并使用它来控制对接收者的访问.或者,您可以定义2个不同的Intent
操作,并使用它来控制访问.
您可以使用特定权限保护每个单独的组件.这是android:permission="..."
可以单独应用于每个组件的属性.这允许您需要不同的权限,例如,启动特定的Activity
,启动特定的Service
或使用特定的BroadcastReceiver
.此属性指示应用程序需要保留指定的权限才能使用特定组件.
一个应用程序拥有一组权限.
标签在清单中请求这些权限.在应用时,用户显示该列表安装和应用程序被授予这些权限在安装时.
发送广播时,通常所有已安装和/或已注册BroadcastReceiver
的广播都能看到此广播.使用该方法时,sendBroadcast(intent, permission)
该permission
参数用于控制哪些接收器能够看到广播.但是,此权限检查也在应用程序级别完成.这意味着如果应用程序已被授予指定的权限,那么该应用程序的所有内容BroadcastReceiver
都将能够看到广播.
因此,使用Android权限机制无法实现您的目标.由于应用程序具有或没有特定权限,因此您无法对特定应用程序可以使用的组件进行细粒度控制.
希望这能回答你的问题.
编辑:替代建议:
由于这都在一个应用程序中,您应该能够自己管理它.就个人而言,我认为使用Android权限框架是有点过分的.您可以在广播中添加适当的额外内容,Intent
并使用它来控制对接收者的访问.或者,您可以定义2个不同的Intent
操作,并使用它来控制访问.