Android 广播

本文深入讲解了Android广播机制,包括广播发送者与接收者的工作原理,以及如何在App内部及跨App进行消息通信。介绍了自定义BroadcastReceiver的方法,以及静态和动态注册的使用技巧。

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

Android进阶--广播

广播机制概述

Android 广播分为两个方面,广播发送者和广播接收者,通常情况下BroadcastReceiver指的就是广播接收者。
广播作为Android组件间的通讯方式,可以使用的场景如下:
1.同一App内部的同一组件之间的消息通讯,单个或多个线程之间。
2.同一App内部不同组件之间的消息通讯。
3.不同App之间的组件之间消息通讯。
4.Android系统在特定情况下与App之间消息通信。

自定义BroadcastReceiver

自定义广播接收器需要继承基类BroadcastReceiver,并实现抽象方法onReceive(context,context)方法。广播接收器接收到相应广播后,会自动回到onReceiver(…)方法。

public class MyBroadercastReceiver extends BroadcastReceiver{
   public static final String TAG="MyBroadcastRececiver";//名称
   @Override
   public void onReceive(Context context,Intent intent) {
      String name=intent.getStringExtra("name");
      Log.e(TAG,"name:"+name);
   }
}

BroadcastReceiver注册类型

总体可以分为两中注册类型,静态注册和动态注册。
1.静态注册

 <receiver android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string" >
. . .
</receiver>

android:name --此broadcastReceiver类名
android:permission --如果设置,具有相应权限的广播发送方发送的广播才能被此broadcastReceiver所接受

常见的注册形式:

<receiver android:name=".MyBroadcastReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

2.动态注册:

动态注册时,无须再AndroidManifest中注册《receiver/》组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册

public class MainActivity extends Activity {
      public static final String BROADCAST_ACTION = "com.example.corn";
      private BroadcastReceiver mBroadcastReceiver;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
         mBroadcastReceiver = new MyBroadcastReceiver();
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(BROADCAST_ACTION);
         registerReceiver(mBroadcastReceiver, intentFilter);
     }
     
     @Override
     protected void onDestroy() {
         super.onDestroy();
        unregisterReceiver(mBroadcastReceiver);
     }
 
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值