安卓intent发起广播事件给系统或当前app,并从系统或当前app中接收广播

本文详细介绍了Android中的广播机制,包括如何定义和注册广播接收器、动态注册广播接收器的方法、如何发起广播事件以及局部广播的概念。同时,还提供了具体的代码示例帮助理解。

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

全栈工程师开发手册 (作者:栾鹏)

python教程全解

定义广播接收器

这里定义了一个广播接收一个系统屏幕选装的广播事件和一个自定义事件


import android.content.Intent;
import android.net.Uri;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.util.Log;

public class BroadcastReceiver1 extends BroadcastReceiver {

    public final static String key1 = "str_key";
    public final static String key2 = "double_key";
    public static final String action_name = "com.lp.intent.name1";
      @Override
      public void onReceive(Context context, Intent intent) {
          //获取事件名称
          String action_name = intent.getAction();
          Log.v("广播接收", "事件名称:"+action_name);
          if (action_name.equals("android.net.conn.CONNECTIVITY_CHANGE")){
                Log.v("广播接收","网络状态发生了变化");
          }

          if (action_name.equals("com.lp.intent.name1")) {
              //从intent中获得lifeform的细节
              Uri data = intent.getData();
              String str_value = intent.getStringExtra(key1);
              double double_value = intent.getDoubleExtra(key2, 0);
              if (str_value.equals("value1")) {
                  Log.v("广播接收",str_value);
              }
          }

      }
}

注册广播接收器

方法1:通过AndroidManifest.xml文件注册

在AndroidManifest.xml文件中注册接收处理系统广播、自定义广播的广播接收器。不同的广播接收事件还需要不同的权限,这里需要添加网络权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


<!-- 注册BroadcastReceiver,这种注册方式当应用程序未启动或被终止,也能接收  -->
  <receiver android:name="com.lp.app.intent.BroadcastReceiver1">
       <intent-filter>
               <!--  intent-filter指定要监听的动作字符串,这里添加所有(category)网络连接事件和一个(action)自定义事件 -->
                <category android:name="android.net.conn" />
                <action android:name="com.lp.intent.name1" />
       </intent-filter>
   </receiver> 

方法2:在窗口中动态注册广播接收

  //使用Intent来广播事件。参数标准一般设置在接收文件中。
    private IntentFilter filter = new IntentFilter("com.lp.intent.name1");   //IntentFilter用来设置能够触发广播接收的事件信息。初始化时可以添加一个监听事件名称
    private BroadcastReceiver1 receiver = new BroadcastReceiver1();

    //在窗口运行时才启动接收器,便于更新UI的广播器
    @Override
    public synchronized void onResume() {
      super.onResume();
      //注册广播接收,也可以在manifest中注册
      filter.addCategory("android.net.conn");   //addCategory添加一系列监听事件
      filter.addCategory("android.net.conn.CONNECTIVITY_CHANGE");   //添加一个监听事件,网络变化事件
      registerReceiver(receiver, filter);    //参数为接收处理器,和触发接收机的条件。
      Log.v("广播", "注册了广播接收");
      super.onResume();
    }

    @Override
    public synchronized void onPause() {
      //取消广播接收
      unregisterReceiver(receiver);  
      Log.v("广播", "注销了广播接收");
      super.onPause();
    }

发起广播事件给系统

当然你只能发起自定义广播事件给系统其它应用或当前应用

private void Broadcastfun() {
    //下面的事件名称和添加属性,我们习惯使用接收器中的常量,是为了发送和接收两端出现不一致。
    Intent intent = new Intent(BroadcastReceiver1.action_name);  //参数为intent事件名称字符串,用来标识事件唯一性,习惯上使用与包名相同格式
    intent.putExtra(BroadcastReceiver1.key1,"value1");      //传递字符串数据
    intent.putExtra(BroadcastReceiver1.key2,23.5);          //传递浮点数据
    sendBroadcast(intent);
    Log.v("广播", "发起系统广播");
 }

注册定义局部广播接收器

LocalBroadcastManager lbm=LocalBroadcastManager.getInstance(this);
lbm.registerReceiver(new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("局部广播", "接收到局部消息");
    }
}, new IntentFilter("action_name1"));

发送局部广播

LocalBroadcastManager lbm=LocalBroadcastManager.getInstance(this);
//发送局部广播事件
LocalBroadcastManager lbm1=LocalBroadcastManager.getInstance(this);
lbm1.sendBroadcast(new Intent("action_name1"));

其他

另外广播接收还有
广播有序Intent,sendOrderedBroadcast
广播Sticky Intent,sendStickyBroadcast
Pending Intent,响应将来事件时触发的intent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾讯AI架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值