首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当BroadcastReceiver上的putExtra和getSerializable时,对象返回null

在Android开发中,BroadcastReceiver 是一种用于接收系统或应用广播消息的组件。putExtra()getSerializable() 是用于在 Intent 中传递和获取数据的两种方法。

基础概念

  • putExtra(): 用于将数据放入 Intent 中。可以传递基本数据类型、Parcelable 对象、Serializable 对象等。
  • getSerializable(): 用于从 Intent 中获取 Serializable 对象。

问题描述

当在 BroadcastReceiver 上使用 putExtra()getSerializable() 时,对象返回 null

可能的原因及解决方法

  1. 对象未正确传递:
    • 确保在发送广播时,对象已经正确放入 Intent 中。
    • 确保在发送广播时,对象已经正确放入 Intent 中。
  • 对象未正确实现 Serializable 接口:
    • 确保传递的对象实现了 Serializable 接口。
    • 确保传递的对象实现了 Serializable 接口。
  • 获取对象时键值不匹配:
    • 确保在接收广播时,使用的键值与发送广播时一致。
    • 确保在接收广播时,使用的键值与发送广播时一致。
  • 广播接收器未正确注册:
    • 确保广播接收器已经正确注册。
    • 确保广播接收器已经正确注册。

应用场景

  • 系统广播: 如网络状态变化、电池电量变化等。
  • 自定义广播: 如应用内部模块间的通信。

示例代码

发送广播:

代码语言:txt
复制
Intent intent = new Intent("com.example.ACTION");
MySerializableObject obj = new MySerializableObject();
intent.putExtra("key", obj);
sendBroadcast(intent);

接收广播:

代码语言:txt
复制
BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        MySerializableObject obj = (MySerializableObject) intent.getSerializableExtra("key");
        if (obj == null) {
            Log.e("BroadcastReceiver", "Object is null");
        } else {
            // 处理对象
        }
    }
};

IntentFilter filter = new IntentFilter("com.example.ACTION");
registerReceiver(receiver, filter);

参考链接

通过以上步骤,可以确保在 BroadcastReceiver 中正确传递和获取 Serializable 对象。如果仍然遇到问题,建议检查日志输出,进一步排查具体原因。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 点击通知栏消息打开activity,并判断app是否运行

flag不是必须,什么情况下需要设置flag?当在广播接收器中跳转到activity,当在service中转到activity。...对于第二种情况,我参照了很多app做法,现总结为以下两种: 点击通知栏消息打开activity按下返回键后判断app是否启动,如果没有启动就要启动app; 点击通知栏消息判断app是否正在前台运行,...,返回1代表当前应用在前台运行,返回2代表当前应用在后台运行,返回0代表应用未启动(没有一个存活activity)。...2.singleTop:如果某个ActivityLaunch mode设置成singleTop,那么该Activity位于栈顶时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新实例压入栈中...BLaunch mode为singleTask,此时D通过Intent跳转到B,则栈情况变成了:A B。而CD被弹出销毁了,也就是说位于B之上实例都被销毁了。

3.3K10

Android应用界面开发——BroadcastReceiver(实现基于Service音乐播放器)

BroadcastReceiver:广播接收者,Android四大组件之一,这个组件本质就是一个全局监听器,用于监听系统全局广播消息。...BroadcastReceiver简介 ---- BroadcastReceiver用于接收程序(开发者开发程序系统程序)发出Broadcast Intent,程序启动BroadcastReceiver...,并使用该Intent对象对外发送了一条广播。...;点击Activity界面按钮,系统将通过发送广播通知后台Service来改变播放状态。...,并根据广播消息内容改变Service播放状态,播放状态改变,该Service对外发送一条广播,广播消息将会被前台Activity接收,前台Activity将会根据广播消息更新界面。

1.6K20
  • 责任链模式

    1.定义 责任链模式是行为型设计模式之一,它使多个对象都有机会处理请求,从而避免了请求发送者接受者之间耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。...2.实战演练 用三个BroadcastReceiver来演示责任链事件处理 FirstReceiver (limit==1000时候获取msg打印并退出,否则添加一个新msg给下一个Receicer...==100时候获取msg上一个reveicer添加msg打印并退出,否则添加一个新msg给下一个Receicer) public class SecondReceiver extends BroadcastReceiver...==10时候获取msg上一个reveicer添加msg打印并退出,否则添加一个新msg给下一个Receicer) public class ThirdReceiver extends BroadcastReceiver...("msg", "msg from MainActivity"); sendOrderedBroadcast(intent, null); 3.总结 1.优点 可以对请求者处理者关系解耦

    70650

    android Broadcast Receiver漏洞挖掘

    Broadcast Receiver安全场景危害 BroadcastReceiver是Android四大组件之一,这个组件涉及两个概念:广播发送者广播接受者。...这里广播实际就是intent。...发送一个广播,系统会将发送广播(intent)与系统中所有注册符合条件接收者IntentFilter进行匹配,若匹配成功,则执行相应接收者onReceive函数。...如果导出BroadcastReceiver没有做权限控制,导致BroadcastReceiver组件可以接收一个外部可控url、或者其他命令,导致攻击者可以越权利用应用一些特定功能,比如发送恶意广播...返回结果需注意接收app是否会泄露信息。 发送广播包含敏感信息需指定广播接收器,使用显示意图或者setPackage(String packageName)。

    1.1K20

    Android广播

    发送接收流程 发送接受过程: 发送 首先在需要发送信息地方 ,把要发送信息用于过滤信息(如action category)封装进intent对象,然后调用 Context.sendBroadcast...() 、sendOrderBroadcast()或sendStickBroadcast()方法,把intent对象以广播形式发送出去 接收 intent发送后,所有已经注册BroadcastReceiver...文件中声明了对应权限BroadcastReceiver才能就收到; 同样,如果在注册BroadcastReceiver指定了可接受Broadcast权限,则只有在包AndroidManifest.xml...拥有此权限Context对象所发送Broadcast才能被这个BroadcastReceiver所接收。...虽然 广播发送接受都是通过intent类,但是广播intent完全 启动activityintent不同。 BroadcastReceiver是无法看到启动activityintent

    1.1K120

    Activity数据传递

    Bundle对象包含了多个方法来存入数据取出数据,如下所示。 putXxx(String key , Xxx data):向 Bundle 中放入 int、long 等各种类型数据。...getSerializable(String key, Serializable data):从 Bundle 中取出一个可序列化对象。...其实用Intent传递数据以及对象,它内部也是调用了Bundle对象相应put()方法,也就是说Intent内部也是用Bundle来实现数据传递,只是封装了一层而已。...需要注意是,getStringExtra(String str)方法传人参数必须是MainActivity中intent.putExtra()方法中传人key,否则会返回null。...,android:label属性是用来指定显示在标题栏名称,如桌Activity设置了该属性,则跳到该Activity页面标题栏会显示在Activity中配置名称,否则显示在Application

    1.1K80

    笔记:BroadcastReceiver运行过程

    静态注册广播,每次收到广播一个Receiver被创建,在主线程中执行其onReceive()方法,方法返回后,Receiver组件即等待销毁。...mMainThread.getApplicationThread(), rd, filter, broadcastPermission); ... } mMainThread.getHandler()返回一个当前进程主线程...也就是注册MyReceiverContext对象,MyReceiverMyActivity关联。...>(); 它以Receiver关联Context对象(也就是执行注册context对象)作为key,存储了对应context注册所有的BroadcastReceiver对象。...阶段3:AMS消息队列处理BROADCAST_INTENT_MSG AMS所运行线程消息队列中BROADCAST_INTENT_MSG消息被处理,AMS从广播调度队列中找到需要接收此广播广播接收者

    92070

    安卓应用安全指南 4.2.1 创建使用广播接收器 示例代码

    使用广播接收器风险对策,根据收到广播类型而有所不同。 你可以在以下判断流程中找到你广播接收器。 接收应用无法检查发送广播应用包名称,它是链接伙伴所需。...6) 小心并安全地处理收到返回结果,即使数据来自相同应用中接收器。...2) 小心并安全地处理收到意图。 3) 返回结果,不要包含敏感信息。 公共广播接收器示例代码可以用于静态动态广播接收器。...向公共广播接收器发送广播,需要注意广播可以被恶意软件接收。...9) 导出 APK ,使用与发送应用相同开发人员密钥对 APK 进行签名。 内部广播接收器示例代码可用于静态动态广播接收器。

    48920

    BroadcastReceiver详解以及应用

    public abstract void onReceive(Context context, Intent intent); 收到注册广播,onReceive方法会被调用。...BroadcastReceiver有两种注册方式: 静态注册(在AndroidManifest.xml清单文件中注册) 动态注册(在代码中注册) 广播接收者静态注册方式 当我们需要一直接收某种广播...动态注册 动态注册方式依赖于所注册组件,APP关闭后,组件对象都不在了动态注册代码都不存在了,所动态注册监听action自然不在生效。...本地广播 与有序无序广播全局广播(任何一方发出广播本手机任何一个程序都能收到对应广播)相比,本地广播是局部广播基于本程序广播,其他程序无法收到这个广播。...,因为我存数据时候是intent.putExtra("qian", "100");存入

    84431

    实验三 音乐播放器

    实验三: 音乐播放器 实验目标实验内容: 1、掌握服务基本概念,能编写服务过程并进行调用; 2、掌握广播基本概念,能实现广播通信。...break; } getActivity().sendBroadcast(intent); } 配置监听到点击触发事件 @Override public...BroadcastReceiver接收 sendBroadcast(sendIntent); } } 接收frdFragment控制信息并对于不同状态下播放器执行对于不同控制信息事件...,并发送播放器状态歌曲编号给fragment private void prepareAndPlay(String music) { try {...对象,需要设置其actionname; 2.推荐使用显式指明receiver,在配置文件指明; 3.一个receiver可以接收多个action; 4.每次接收广播都会重新生成一个接收广播对象

    1.5K20

    Android 四大组件学习之BroadcastReceiver

    广播分为无序广播有序广播 无序广播: 广播发送者action与广播接收者action都匹配的话,所以广播介绍者都可以收到这条广播,并且没有先后顺序,可以认为是同时收到 有序广播: 广播发送者action...sendOrderedBroadcast(intent, null, null, null, 0, "每个学生早上7点必须早操", null); } 然后,就每个接收者做个调整...: 计算机院长把校长的话给改了,校长说计算机要第一必须6点半起来: public class ComputerPresidentReceiver extends BroadcastReceiver..."); } } 这时候广播到导员了,导员说计算机系必须第一,6点起来: public class TeacherReceiver extends BroadcastReceiver {...sendOrderedBroadcast(intent, null, new resultReceiver(), null, 0, "每个学生早上7点必须早操", null); }

    27520

    全局事件-广播(Broadcast)

    什么是广播 广播是Android SDK四大组件中唯一需要别动接收数据组件。也就是说对于Activity、ContentProviderService都可以主动调用,并获取返回数据。...从这种表现形式看,很像面向对象事件(Event),对于事件(onClick、onKeydown)来说,从来不会预知用户什么时候触发他们,只能默默等待不可预知事件发生。...广播优先级只是对同步处理方式起作用,如果在接收器中使用了异步处理方式,则调用顺序除了优先级有关,还和Android系统线程调用有关。...来电可以分解为3个状态:未接电话响铃,接听电话 挂断电话(可能是对方挂断,也可能是自己挂断) 监听这三个状态代码如下(使用静态方式注册广播): CallInReceiver: package...,手机会进入休眠状态(屏幕变黑),再此按下手机任意键后,屏幕会唤醒(屏幕变量)。

    1.1K60

    Activity 跳转详解

    (), MyActivity.class) ,参数1 可以使用通用Context对象,参数2 则是需要跳转到Activity字节码对象 可以在Intent对象中存放数据 i.putExtra(key...getIntent()方法特点 我们将显示代码打上断点可以观测到,每次启动, getIntent() 取得方法总是 null (注:若你在模拟发送短信前,应用已经关闭,那么会回显示第一次数据,再次发送短信取得都是第一次数据...Activityintent */ 光看这个你很难理解到什么叫返回启动时候intent,本可以最简洁地口头描述给你看,但是这里还是准备用事实说话,我们继续查找名称中带有intent方法,果然找到个文字叙述比较多且痛快方法... Intent 对象。...然后是说:已经有此 Activity 实例存在栈顶,上面两种情况都会导致 onNewIntent() 方法被调用。 下面两个段落是说: 1.

    62220

    使用 Intent 启动 ActivityActivity之间数据传递

    在Android 程序之中,Activity 对象用户交互唯一手段,几乎每个 Android 项目程序都有多个 Activity。因此,灵活在屏幕切换 Activity 尤为重要。...当然,我们也可以在创建Intent 对象不传入要启动 Activity 对象,即为隐式Intent。...第四行代码设置了 Intent 启动Activity对象标志,在这里可以把它看成一种筛选Activity属性,只有Intent对象Action、Data、Category (如果Intent设置了这些属性...null也不为空字符串时候返回false */ if(!...成功显示,单击返回后再单击“传送图片数据”按钮: ? good,图片成功显示,再单击返回后单击“传送自定义数据”按钮: ?

    2.3K10

    自用知识_实用小知识

    发现在editText.setFocusable(false);editText.setEnabled(false);不可编辑,但是editText.setFocusable(true); editText.setEnabled...=”#00000000″,这个设置可以去除拖动view背景变成黑色效果 android:listSelector=”#00000000″ ,可以去除选中黄色底色 StyleDiogl样式...:windowIsFloating”>true//对话框是否浮动在Activity @null...按返回键还起作用 方法二: setCanceleable(false);调用这个方法,按对话框以外地方不起作用。...1、当你是web应用时,比如说要建个网站,需要发布到服务器,应该要建Web Project 2、当你是做分布式系统,也就是你做只是一个服务,对外发布也只是一个服务时候,需要建立Web Services

    62720

    【Android】期末选择题判断题

    7 关于ServiceThread区别说法,不正确是( C) A、有耗时或阻塞操作应该在其中创建一个线程。 B、可以在Service里创建一个Thread。...A、data为返回数据Intent B、data为启动Activity传递Intent C、requestCode为启动Activity传递请求码 D、resultCode为返回数据传入结果码...A、SQLite采用动态数据类型,某个值插入到数据库,SQLite将会检查它类型 B、SQLite支持NULL、INTEGER、FLOAT、REAL、TEXTBLOB数据类型 C、SQLite...我答案:√ 36 用Intent传递数据只需调用putExtra()方法将想要存储数据存在Intent中即可。 我答案:√ 37 使用Intent不能传递Parcelable类型对象。...我答案:× 41 在Intent传递数据可以调用putExtra()或putExtras()方法将想要存储数据存在Intent中。 我答案:√ 得分:

    1.4K51
    领券