broadcastreceiver的使用

醉清风 醉清风     2022-08-02     452

关键词:

定义

广播接收器分为标准广播和有序广播,标准广播是异步执行的广播,有序广播是同步执行的,同一时刻只有一个广播接收器会收到广播,执行结束后,广播才会继续传递。

静态注册

在Androidmanifest.xml中添加<receiver>节点,并在代码中定义相应的类。在receiver字段里面可以指定priority来指定receiver的优先级,优先级高的会先接收到消息。如果不指定,后注册的receiver先接收到消息

        <receiver android:name=".BootCompleteReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

public class BootCompleteReceiver extends BroadcastReceiver {
    //static registered in AndroidManifest.xml
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Boot Complete", Toast.LENGTH_SHORT).show();
    }
}

动态注册

可以在代码中注册,这种方法比较灵活,可以自由的注册与注销,但是缺点是必须要程序启动才能收到广播。只需要创建一个BroadcastReceiver的子类并重写父类的onReceive函数就可以了。当有广播到来时,onReceive方法就会被执行。

public class MyReceiver extends BroadcastReceiver {

    public static final String ACTION = "com.wanxiang.www.learnbroadcastreceiver.intent.action.myReceiver";
case R.id.btnRegister:
                if (myReceiver == null){
                    myReceiver = new MyReceiver();
                    registerReceiver(myReceiver, new IntentFilter(MyReceiver.ACTION));
                }
                break;
            case R.id.btnUnRegister:
                if (myReceiver != null){
                    unregisterReceiver(myReceiver);
                    myReceiver =null;
                }
                break;

自定义广播

其他都同动态静态注册的broadcastreceiver一样,只是intent-filter写的是自己定义的broadcast,同样在类中也要写发送相应的broadcast(可能在一个button的click中):

Intent intent = new Intent("com.wanxiang.www.broadcastreceiver.MY_BROADCAST");
//标准广播
sendBroadcast(intent);
//有序广播,可以被abortBroadcast()截断
sendOrderedBroadcast(intent,null);

有序广播

发送的有序广播可以在BroadcastReceiver的onReceive函数中被截断:

sendOrderedBroadcast(i, null);
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        System.out.println("MyReceiver1接受到了消息");
        abortBroadcast();
    }

 

本地广播

只让broadcast在应用程序内部进行传递

使用字符串资源命名(标记)小部件的 BroadcastReceiver

】使用字符串资源命名(标记)小部件的BroadcastReceiver【英文标题】:Usingastringresourcetoname(label)awidget\'sBroadcastReceiver【发布时间】:2020-01-1711:55:21【问题描述】:我有一个如下定义的小部件:[BroadcastReceiver(Label="Upcoming")][IntentFilte... 查看详情

java示例代码_使用BroadcastReceiver删除传入的Sms

java示例代码_使用BroadcastReceiver删除传入的Sms 查看详情

android基础到进阶面试题之broadcastreceiver使用+实例(代码片段)

BroadcastReceiver是什么        BroadcastReceiver是Android四大组件之一,是一种广泛运用在应用程序之间传输信息的机制,通过发送Intent来传送我们的数据。BroadcastReceiver使用场景应用内多个不同组件之间的消息通信。跨应用... 查看详情

ContentObserver 与 BroadCastReceiver:电池使用情况、内存、CPU?

】ContentObserver与BroadCastReceiver:电池使用情况、内存、CPU?【英文标题】:ContentObservervs.BroadCastReceiver:BatteryUsage,Ram,CPU?【发布时间】:2012-08-3120:35:11【问题描述】:由于对应用程序的电池使用、内存和cpu使用有如此必要的关注,... 查看详情

broadcastreceiver使用goasync执行异步操作

roadcastReceiver生命周期一个BroadcastReceiver对象只有在被调用onReceive(Context,Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。因此从这个特征可以看出,在所调用的onReceive(Context,Intent)函数里,不能有过于耗... 查看详情

GCM 如何使用 BroadCastReceiver 处理应用程序

】GCM如何使用BroadCastReceiver处理应用程序【英文标题】:HowdoesGCMhandleappswithBroadCastReceiver【发布时间】:2015-08-0905:34:30【问题描述】:我很难理解&lt;intent-filter&gt;如何处理BroadCastReceiver的基本概念。使用下面的代码我设置了... 查看详情

并不总是触发带有 BroadcastReceiver 的地理围栏

】并不总是触发带有BroadcastReceiver的地理围栏【英文标题】:GeofencewithBroadcastReceiverisnotalwaystriggered【发布时间】:2019-03-2611:34:29【问题描述】:在我的应用程序中使用地理围栏之前,我使用IntentService作为其回调,一切正常。但... 查看详情

adb shell 的 BroadcastReceiver 权限

】adbshell的BroadcastReceiver权限【英文标题】:BroadcastReceiverpermissionforadbshell【发布时间】:2016-05-0105:01:46【问题描述】:考虑一个使用BroadcastReceiver的简单工具来实现一个简单的目标。因为这不应该被其他应用程序使用,所以它定... 查看详情

在 Intent.createChooser() 中使用的 BroadcastReceiver 的参数

】在Intent.createChooser()中使用的BroadcastReceiver的参数【英文标题】:ArgumentsforaBroadcastReceiverusedinsideIntent.createChooser()【发布时间】:2021-02-2323:57:15【问题描述】:我的应用上有很多分享按钮。当按下共享按钮时,会向用户显示一个... 查看详情

broadcastreceiver的使用

定义广播接收器分为标准广播和有序广播,标准广播是异步执行的广播,有序广播是同步执行的,同一时刻只有一个广播接收器会收到广播,执行结束后,广播才会继续传递。静态注册在Androidmanifest.xml中添加<receiver>节点,... 查看详情

使用registerreceiver注册broadcastreceiver

publicIntentregisterReceiver(BroadcastReceiverreceiver,IntentFilterfilter):注册一个BroadcaseReceiver在主activity线程中运行,这个receiver只能够被主application线程中匹配filter的Intent唤醒执行;unregisterReceiver(receiver):注销receiver 查看详情

在单例中使用 BroadcastReceiver 的最巧妙方法等等

】在单例中使用BroadcastReceiver的最巧妙方法等等【英文标题】:SlickestwaytouseBroadcastReceiverinasingletonandmore【发布时间】:2010-09-1714:51:17【问题描述】:我有一个单例,它存储有关我的应用程序用户的一些谨慎信息。目前,它存储用... 查看详情

如何使用新的导航架构组件从扩展 BroadcastReceiver 的类导航到片段

】如何使用新的导航架构组件从扩展BroadcastReceiver的类导航到片段【英文标题】:HowtonavigatetoafragmentfromaclassextendingBroadcastReceiverusingthenewNavigationArchitectureComponents【发布时间】:2021-03-2016:29:11【问题描述】:我有我的广播接收器,... 查看详情

使用 BroadcastReceiver 实现 Android 通知操作时出错

】使用BroadcastReceiver实现Android通知操作时出错【英文标题】:ErrorwhileimplementingAndroidNotificationActionswithBroadcastReceiver【发布时间】:2021-09-2815:03:00【问题描述】:我正在尝试让通知中的操作按钮调用一种方法。我阅读并关注了一些... 查看详情

GCM BroadcastReceiver setResultCode 使用

】GCMBroadcastReceiversetResultCode使用【英文标题】:GCMBroadcastReceiversetResultCodeuse【发布时间】:2014-07-0609:27:18【问题描述】:我正在使用来自android开发人员的GCM示例,但无法理解setResultCode(Activity.Result_OK)。哪个组件接收到这个消息... 查看详情

使用 AlarmManager/BroadcastReceiver 在 Android 中每周一重复闹钟

】使用AlarmManager/BroadcastReceiver在Android中每周一重复闹钟【英文标题】:RepeatAlarmsonEveryMondayinAndroidusingAlarmManager/BroadcastReceiver【发布时间】:2012-06-2509:23:55【问题描述】:我想在每周一上午09:00和下午05:00重复我的任务。我为此使... 查看详情

具有 ResultReceiver 和生命周期的 BroadcastReceiver

】具有ResultReceiver和生命周期的BroadcastReceiver【英文标题】:BroadcastReceiverwithResultReceiverandlifetime【发布时间】:2014-05-1911:54:51【问题描述】:我询问了使用带有ResultReceiver的BroadcastReceiver的方式。我知道如果“ABroadcastReceiver没有在... 查看详情

AlarmManager 不调用 BroadcastReceiver

】AlarmManager不调用BroadcastReceiver【英文标题】:AlarmManagerdoesnotcallBroadcastReceiver【发布时间】:2019-05-0909:53:53【问题描述】:我在每天的特定时间创建了一个预定的重复警报,使用AlarmManager在扩展BroadcastReceiver的类中触发通知。但... 查看详情