Android广播(BroadCast)

本文详细介绍了Android中的广播机制,包括其工作原理、应用场景以及如何实现广播的发送与接收。通过对比实际生活中的广播电台,解释了Intent在Android广播中的角色,并展示了动态与静态注册广播接收者的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是广播

  在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。我们拿广播电台来做个比方。
  我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,
  而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了。
  Android中的广播机制就和这个差不多的道理。
  电台发送的内容是语音,而在Android中我们要发送的广播内容是一个Intent。这个Intent中可以携带我们要传送的数据。
  电台通过大功率的发射器发送内容,而在Android中则是通过sendBroadcast这个方法来发送(很形象的名字吧)。       
  只有发送广播的action和接收广播的action相同,接受者才能接受这个广播。

广播有什么用

1.实现了不同的程序之间的数据传输与共享,因为只要是和发送广播的action相同的接受者都能接受这个广播。比如说拦截系统短信,拦截骚扰电话等等
2.起到了一个通知的作用,比如在service中要通知主程序,更新主程序的UI等。

如何实现广播

 Android提供了两种注册广播接受者的形式,分别是在程序中动态注册和在xml中静态注册。   
 程序动态注册的接收者只在程序运行过程中有效,而在xml注册的接收者不管你的程序有没有启动有会起作用。下面小编模拟一个简单的广播。

发送者

 public void send(View view){
        //得到广播内容
        String content=et_main_content.getText().toString();

        //发送广播
        Intent intent=new Intent();
        //设置广播的名字
        intent.setAction("com.android_sender.FM90.5");
        //设置广播内容
        intent.putExtra("content",content);
        sendBroadcast(intent);
    }

接收者

xml中静态注册

public class MyReceived01 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        //得到广播名字
        String name=intent.getAction();
        if("com.android_sender.FM90.5".equals(name)){
            //得到广播内容
            String content=intent.getStringExtra("content");
            Log.i("test","我是1号接受者,收到广播的内容:"+content);
        }
    }
}
  <!--配置广播接受者
        1.静态(在清单文件中进行配置)
        2.动态(在java 代码中进行配置)
        -->
        <receiver android:name=".MyReceived01">
            <intent-filter>
                <action android:name="com.android_sender.FM90.5"></action>
            </intent-filter>
        </receiver>

java动态注册

public class MyReceived02 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //收消息
        //得到广播名字
        String name=intent.getAction();
        if("com.android_sender.FM90.5".equals(name)){
            //得到广播内容
            String content=intent.getStringExtra("content");
            Log.i("test","我是2号接受者,收到广播的内容:"+content);
        }
    }
}
public class MainActivity extends AppCompatActivity {

    private MyReceived02 myReceived02;
    private IntentFilter intentFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myReceived02 = new MyReceived02();
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.android_sender.FM90.5");
    }

    @Override
    protected void onResume() {
        super.onResume();
        //注册广播(动态)
        //必须取消注册
        registerReceiver(myReceived02,intentFilter);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceived02);
    }
}

动态广播和静态广播的区别

相同点
都能收到广播,都是无序的,

不同点
静态是在清单文件里写,退出应用程序任可以受到广播。而动态是在java代码中,退出应用程序不可以受到广播,动态优先级更高于静态。

当然广播还有无序广播,黏性广播,无序广播还有系统广播等,有兴趣的同学到网上搜搜就有了。这里就不再举例了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值