Android-Broadcast广播事件(1)-简介及普通广播调用步骤

前言

BroadcastReceiver即广播接收器,是专门用于接受广播消息以及做出相应处理的组件。其本质就是一个全局监听器,接收程序所发出的Broadcast Intent。

但是它是没有用户界面的,可以启动一个Activity来响应接收到的信息或者用NotificationManager来通知用户。
总体而言,广播机制包含三个要素:
1. 发送广播的Broadcast;
2. 接收广播的BroadcastReceiver;
3. 以及用于前面两者之间传递消息的Intent;

1. 广播事件开发步骤

1. 定义一个广播接收器

只需重写onReceive方法

public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        //method
    }
}

2. 注册广播事件

注册广播事件 有两种方式

  • 动态注册,代码中调用BroadcastReceiver的Context的registerReceiver()方法进行注册
//        实例化定义好的BroadcastReceiver
        MyReceiver receiver=new MyReceiver();
//        实例化过滤器,并设置过滤的广播的action,
        IntentFilter filter=new IntentFilter("MY_ACTION");
//        注册
        registerReceiver(receiver,filter);
  • 静态注册
<receiver android:name=".MyReceiver">
            <intent-filter>
                <action android:name="MY_ACTION"></action>
            </intent-filter>
  </receiver>

3. 发送广播

               Intent intent=new Intent();
//               action需要与注册广播的action一样
               intent.setAction("MY_ACTION");
//               传递的消息
               intent.putExtra("msg","send Broadcast");
//               发送
               sendBroadcast(intent);

4. 设置接受广播的处理函数

 public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        //method
        String msg=intent.getStringExtra("msg");
        System.out.println(msg);
        Toast.makeText(context,msg,Toast.LENGTH_LONG).show();
    }

2. 例子

  • MainActivity
public class MainActivity extends AppCompatActivity {
Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        实例化定义好的BroadcastReceiver
        MyReceiver receiver=new MyReceiver();
//        实例化过滤器,并设置过滤的广播的action,
        IntentFilter filter=new IntentFilter("MY_ACTION");
//        注册
        registerReceiver(receiver,filter);

button=(Button)findViewById(R.id.button);
       button.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Intent intent=new Intent();
//               action需要与注册广播的action一样
               intent.setAction("MY_ACTION");
//               传递的消息
               intent.putExtra("msg","send Broadcast");
//               发送
               sendBroadcast(intent);

           }
       });
    }
}
  • BroadcastReceiver
ublic class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        //method
        String msg=intent.getStringExtra("msg");
        System.out.println(intent.getAction());
        System.out.println(msg);
        Toast.makeText(context,msg,Toast.LENGTH_LONG).show();
    }
}
  • 测试
    发送广播后,logcat显示为:
    测试结果
    在这里我们可以发现,广播接受器与发送的广播是通过intent的action属性来匹配的,当相互action一致,则广播接收器回调onReceive函数执行操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 广播可以用于应用程序内部的组件之间通信,也可以用于不同应用程序之间的通信。应用程序可以发送广播,也可以注册广播接收器来接收广播并做出相应的处理。 使用广播的基本步骤如下: 1. 定义广播接收器 广播接收器是一个继承自 BroadcastReceiver 的类,用于接收和处理特定的广播。在广播接收器中实现 onReceive() 方法来处理接收到的广播。例如: ```java public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 处理接收到的广播 } } ``` 2. 注册广播接收器 在应用程序的代码中,可以使用代码动态注册广播接收器,也可以在 AndroidManifest.xml 文件中静态注册广播接收器。例如: ```java // 动态注册广播接收器 MyBroadcastReceiver receiver = new MyBroadcastReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("com.example.MY_ACTION"); registerReceiver(receiver, filter); ``` ```xml <!-- 静态注册广播接收器 --> <receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.example.MY_ACTION" /> </intent-filter> </receiver> ``` 3. 发送广播 在应用程序中发送广播可以使用 Intent 对象,通过设置 Action 和其他相关参数来指定广播的内容。例如: ```java Intent intent = new Intent(); intent.setAction("com.example.MY_ACTION"); intent.putExtra("data", "Hello, broadcast!"); sendBroadcast(intent); ``` 4. 处理广播 广播接收器会在接收到广播调用 onReceive() 方法,可以在该方法中处理广播内容。例如: ```java public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("com.example.MY_ACTION".equals(intent.getAction())) { String data = intent.getStringExtra("data"); // 处理接收到的广播 } } } ``` 需要注意的是,广播接收器的 onReceive() 方法在主线程中执行,因此不能在该方法中执行耗时操作,否则会导致程序无响应。如果需要执行耗时操作,可以考虑使用 IntentService 或 AsyncTask 等异步操作方式来执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值