接收和发送广播

intent 对象不仅可以启动应用程序内部或者其他应用程序的Activity, 还可以发送广播动作(Broadcast)。Broadcast Action 和 Activity Action 一样,既可以由系统进行广播,也可以由自己的程序进行广播。利用广播,我们可以实现特殊的功能,例如,在开机的时候自动启动一个应用程序,当接受到短信自动提示或保存短记录等。实际上,在手机中发生这样的事件时,android 系统都会向整个系统发送相应的Broadcast Action,如果应用程序对这个广播感兴趣的话,就可以接收它 ,来完成相应的功能。

 

1  接收系统广播:

 

    (1)编写一个继承自android.content.BroadcastReceiver的类,并重写其中的onReceive()方法。如果应用程序接收到系统发送的广播,就会调用

            OnReciver()方法。

    (2)在AndroidManifest.xml文件中使用<receiver>标签来指定第一步编写的接收系统广播的类可以接收哪一个Broadcast Action .

 

下面是一个简单的DEMO

 

 实现一个一旦开机就自动启动的程序。

 要实现开机启动功能,需要接收如下系统广播:android.intent.action.BOOT_COMPLETED;

下面我们按照上面的步骤实现接收广播。

 public class startupReceiver extends BroadcastReceiver {

 

    @Override

      public void onReceive( contentxt ctx ,  Intent intent ) {

       Intent mainIntent = new  Intent (ctx ,Main.class);

       mainIntent.setFlags(Intent.FlLG_ACTIVITY_NEW_TASK);

       context.startActivity(mainIntent);

 

 

     }

 }

在onreceive()方法中启动本例的Main,用来表明应用程序已经启动。

(2)在AndroidManifest.xml 文件中配置StartupReceiver类。代码如下:

 

 

  <receiver android:name = "StartupReceiver">

           <intent-filter>

          <!---指定要接收的ACTION->

          <action android:name="android.intent.action.BOOT_COMPLETED"/>

          <!--指定action 的种类,该种类表示android 系统启动后第一运行的应用程序-->

          <category android:name ="android.intent.category.HOME">

 

           </intent-filter>

 

  </receiver>

 

Android 系统中,广播(Broadcast)是一种用于在应用程序之间传递信息的机制。广播接收器(BroadcastReceiver)是专门用来接收并响应广播的组件。以下是实现广播发送接收的基本方法教程。 ### 发送广播 1. **构建 Intent 对象**: 创建一个 `Intent` 对象,并指定广播Action 名称。例如: ```java Intent intent = new Intent("com.example.broadcastreceiver.MY_BROADCAST"); ``` 2. **设置包名(可选)**: 如果希望广播只被当前应用内的接收接收,可以使用 `setPackage()` 方法设置包名。 ```java intent.setPackage(getPackageName()); ``` 3. **发送广播**: 使用 `sendBroadcast()` 方法将广播发送出去,这样所有监听该 Action 的 BroadcastReceiver 都会收到消息。 ```java sendBroadcast(intent); ``` 4. **发送有序广播**: 如果需要按照优先级顺序依次发送广播给多个接收器,可以使用 `sendOrderedBroadcast()` 方法。有序广播允许每个接收器根据其优先级顺序处理广播,并且前一个接收器可以修改广播的数据或阻止它继续传递。 ```java sendOrderedBroadcast(intent, null); ``` ### 接收广播 1. **创建 BroadcastReceiver 子类**: 继承 `BroadcastReceiver` 类并重写 `onReceive()` 方法,以定义接收广播时的行为。 ```java public class LocalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "收到了一条广播", Toast.LENGTH_SHORT).show(); } } ``` 2. **动态注册广播接收器**: 在 Activity 或 Service 中通过代码注册广播接收器。这种方式适合于只需要在特定生命周期内监听广播的情况。 ```java LocalReceiver receiver = new LocalReceiver(); registerReceiver(receiver, new IntentFilter("com.example.broadcastreceiver.MY_BROADCAST")); ``` 3. **静态注册广播接收器**: 在 AndroidManifest.xml 文件中声明广播接收器,并为其指定意图过滤器。这种方式适用于即使应用未运行也需要接收广播的情况。 ```xml <receiver android:name=".LocalReceiver"> <intent-filter> <action android:name="com.example.broadcastreceiver.MY_BROADCAST" /> </intent-filter> </receiver> ``` 4. **注销广播接收器**: 当不再需要接收广播时,应该及时注销广播接收器,避免内存泄漏等问题。 ```java unregisterReceiver(receiver); ``` ### 使用 LocalBroadcastManager(本地广播) 如果不需要跨应用发送广播,推荐使用 `LocalBroadcastManager` 来发送接收广播。这种方法更加高效,并且能够避免潜在的安全问题。 ```java // 发送本地广播 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.example.broadcastreceiver.LOCAL_BROADCAST")); // 注册本地广播接收器 LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "收到了本地广播", Toast.LENGTH_SHORT).show(); } }, new IntentFilter("com.example.broadcastreceiver.LOCAL_BROADCAST")); ``` ### 总结 - 广播分为有序广播无序广播,前者按优先级顺序传递,后者同时发送给所有接收器。 - 可以通过动态或静态方式注册广播接收器。 - 对于仅限于应用内部使用的广播,建议使用 `LocalBroadcastManager` 提升性能安全性[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值