Android_07_自定义广播

本文详细介绍了Android中自定义广播的使用,包括通过`registerReceiver()`动态注册和在清单文件中静态注册两种方式。文章强调了intent广播机制的安全性,如命名空间避免冲突、权限控制发送和接收广播,并提供了代码示例展示广播发送端和接收端的实现。最后,提到了`LocalBroadcastManager`用于限制广播在进程内传播,以提高安全性。
摘要由CSDN通过智能技术生成

前言:

sendBroadcast()可用来发送广播,关于广播的接收,第一种方法是通过registerReceiverr()动态进行注册广播,

第二种方法就是静态地在清单文件中去声明一个广播


Note:

如果你通过registerReceiverr()在Activity.onResume()方法体中注册广播,那么相应地你应该在Activity.onPause()方法中

将这个注册的广播记得销毁掉;


需要知道的是:尽管intent被用来发送和接收广播,但是intent的广播机制和被用来启动一个activity的intent,两者是完全独立的;


安全:

1>

intent是全局的命名空间,确保intent的action和其他字符串都是以你自己的命名空间来命名的,否则的话,可能会造成与其他应用的冲突;

2>

当你使用registerReceiver(BroadcastReceiver, IntentFilter)的时候,任何一个应用都可能会发送广播给这个注册的广播接收者,你可以

通过在下边描述的一些权限来控制谁可以发送广播给这个广播接收者;

3>

当你通过清单文件去声明一个广播接收者且通过intent-filters去指定一个特定类型的广播时,任何一个应用都可以发送广播给这个广播接收者,

无论这个被指定的intent-filters多么的特殊化;为了阻止外部的应用可以发送广播给这个广播接收者,你可以通过android:exported=false来阻止

外部应用的广播对被应用广播接收者的干扰;

4>

当你使用sendBroadcast或相关的方法时,通常任何其他应用程序可以接收这些广播,你可以通过以下权限的描述来实现谁可以接收到这些广播;

当然,你也可以通过Intent.setPackage来严格地限制其只能与某个单独的应用进行广播的发送;


当使用LocalBraodcastManaget的时候,上述所这些问题都将不会存在;因为intent广播不会跑出当前进程之外去;

(关于LocalBraodcastManaget的使用,可参考LocalBroadcastManager的使用总结)


访问权限可以由广播的接收者或广播的发送者来执行;为了在发送时去执行一个权限,你需要提供一个非空的参数给sendBroadcast(Intent, String)

 或者 sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle). 为了在接收时执行一个权限,要么可以

通过调用 registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)或者在你自己的AndroidManifest.xml的 <receiver>里边去

提供一个非空的权限;


代码示例如下:

自定义的广播发送端:

package com.example.administrator.testsendbroadcast;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class SendBroadcastActivity extends AppCompatActivity {

    private final static String TAG = "testBroadcast";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send_broadcast);
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值