Android基本之Broadcast Receiver

本文介绍了如何在Android应用中实现自定义广播及定时发送功能,包括BroadcastReceiver的注册与触发定时任务的实现步骤。

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

1、Broadcast Receiver简介
2、Broadcast Receiver接收定时发送的广播
3、自定义广播

一、Broadcast Receiver简介

Intent是一个对动作和行为的抽象描述,负责组件之间程序之间进行消息传递。那么Broadcast Receiver组件就提供了一种把Intent作为一个消息广播出去,由所有对其感兴趣的程序对其作出反应的机制。

可以使用BroadcastReceiver使应用程序代码能够响应外部事件,如电话呼入、数据网络可用等。尽管BroadcastReceiver可以使用NotificationManager来提醒用户一些感兴趣的事件的发生,但是它并不显示用户界面。

BroadcastReceiver在AndroidManifest.xml中完成注册,也可以在代码中通过Context.registerReceiver()方法完成注册。

应用程序也可以通过Context.sendBroadcast()将自身的intent 广播给其他应用程序。

二、Broadcast Receiver接收定时发送的广播

做一个例子,功能是接收定时发送的广播。

1、建立OneShotAlarm.java 内容如下:

  1. packagecom.example.android.apis.app;
  2. importandroid.content.Context;
  3. importandroid.content.Intent;
  4. importandroid.content.BroadcastReceiver;
  5. importandroid.widget.Toast;
  6. //Needthefollowingimporttogetaccesstotheappresources,sincethis
  7. //classisinasub-package.
  8. importcom.example.android.apis.R;
  9. /**
  10. *Thisisanexampleofimplementan{@linkBroadcastReceiver}foranalarmthat
  11. *shouldoccuronce.
  12. *<p>
  13. *Whenthealarmgoesoff,weshowa<i>Toast</i>,aquickmessage.
  14. */
  15. publicclassOneShotAlarmextendsBroadcastReceiver
  16. {
  17. @Override
  18. publicvoidonReceive(Contextcontext,Intentintent)
  19. {
  20. Toast.makeText(context,R.string.one_shot_received,Toast.LENGTH_SHORT).show();
  21. }
  22. }
package com.example.android.apis.app; import android.content.Context; import android.content.Intent; import android.content.BroadcastReceiver; import android.widget.Toast; // Need the following import to get access to the app resources, since this // class is in a sub-package. import com.example.android.apis.R; /** * This is an example of implement an {@link BroadcastReceiver} for an alarm that * should occur once. * <p> * When the alarm goes off, we show a <i>Toast</i>, a quick message. */ public class OneShotAlarm extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, R.string.one_shot_received, Toast.LENGTH_SHORT).show(); } }

2、在AndroidManifest.xml中注册此Receiver :

  1. <receiverandroid:name=".app.OneShotAlarm"android:process=":remote"/>
<receiver android:name=".app.OneShotAlarm" android:process=":remote" />

3.在Activity中启动定时发送

  1. //Whenthealarmgoesoff,wewanttobroadcastanIntenttoour
  2. //BroadcastReceiver.HerewemakeanIntentwithanexplicitclass
  3. //nametohaveourownreceiver(whichhasbeenpublishedin
  4. //AndroidManifest.xml)instantiatedandcalled,andthencreatean
  5. //IntentSendertohavetheintentexecutedasabroadcast.
  6. Intentintent=newIntent(AlarmController.this,OneShotAlarm.class);
  7. PendingIntentsender=PendingIntent.getBroadcast(AlarmController.this,
  8. 0,intent,0);
  9. //Wewantthealarmtogooff30secondsfromnow.
  10. Calendarcalendar=Calendar.getInstance();
  11. calendar.setTimeInMillis(System.currentTimeMillis());
  12. calendar.add(Calendar.SECOND,30);
  13. //Schedulethealarm!
  14. AlarmManageram=(AlarmManager)getSystemService(ALARM_SERVICE);
  15. am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),sender);
// When the alarm goes off, we want to broadcast an Intent to our // BroadcastReceiver. Here we make an Intent with an explicit class // name to have our own receiver (which has been published in // AndroidManifest.xml) instantiated and called, and then create an // IntentSender to have the intent executed as a broadcast. Intent intent = new Intent(AlarmController.this, OneShotAlarm.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this, 0, intent, 0); // We want the alarm to go off 30 seconds from now. Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 30); // Schedule the alarm! AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);

三、自定义广播

1.发送广播

  1. //定义一个intent
  2. Intentintent=newIntent().setAction(
  3. "myAction").putExtra("myTag",
  4. "myData");
  5. //广播出去
  6. sendBroadcast(intent);
//定义一个intent Intent intent = new Intent().setAction( "myAction").putExtra("myTag", "myData"); //广播出去 sendBroadcast(intent);

2.在AndroidManifest.xml中注册此Receiver

  1. <receiverandroid:name="MyBroadReciever">
  2. <intent-filter="">
  3. <actionandroid:name="myAction">
  4. </action></intent>
  5. </receiver>
<receiver android:name="MyBroadReciever"> <intent -filter=""> <action android:name="myAction"> </action></intent> </receiver>

3.编辑Receiver

  1. packageandroid.example;
  2. importandroid.content.BroadcastReceiver;
  3. importandroid.content.Context;
  4. importandroid.content.Intent;
  5. importandroid.media.MediaPlayer;
  6. importandroid.util.Log;
  7. publicclassMyBroadRecieverextendsBroadcastReceiver{
  8. //如果接收的事件发生
  9. @Override
  10. publicvoidonReceive(Contextcontext,Intentintent){
  11. //对比Action决定输出什么信息
  12. if(intent.getAction().equals("myAction")){
  13. Log.v("MyBroadReciever","onReceive");
  14. }
  15. }
  16. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值