AKh*_*AKh 3 android broadcastreceiver android-intent android-activity android-permissions
这是一个场景.我的应用有
我正在使用该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
.........
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
您可以使用特定权限保护每个单独的组件.这是android:permission="..."可以单独应用于每个组件的属性.这允许您需要不同的权限,例如,启动特定的Activity,启动特定的Service或使用特定的BroadcastReceiver.此属性指示应用程序需要保留指定的权限才能使用特定组件.
一个应用程序拥有一组权限.<uses-permission>标签在清单中请求这些权限.在应用时,用户显示该列表安装和应用程序被授予这些权限在安装时.
发送广播时,通常所有已安装和/或已注册BroadcastReceiver的广播都能看到此广播.使用该方法时,sendBroadcast(intent, permission)该permission参数用于控制哪些接收器能够看到广播.但是,此权限检查也在应用程序级别完成.这意味着如果应用程序已被授予指定的权限,那么该应用程序的所有内容BroadcastReceiver都将能够看到广播.
因此,使用Android权限机制无法实现您的目标.由于应用程序具有或没有特定权限,因此您无法对特定应用程序可以使用的组件进行细粒度控制.
希望这能回答你的问题.
编辑:替代建议:
由于这都在一个应用程序中,您应该能够自己管理它.就个人而言,我认为使用Android权限框架是有点过分的.您可以在广播中添加适当的额外内容,Intent并使用它来控制对接收者的访问.或者,您可以定义2个不同的Intent操作,并使用它来控制访问.
| 归档时间: |
|
| 查看次数: |
3085 次 |
| 最近记录: |