【Android】LiveData在广播中的使用

这篇具有很好参考价值的文章主要介绍了【Android】LiveData在广播中的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

序言

将Livedata在广播中进行使用,这样当广播消息,使用Livedata进行观察获取消息,不需要在Activity里面注册广播了,特别适合在多个Activity里面都要监听一个广播的需求。

项目需求

现在有一个手表连接的广播,当手表连接状态改变时,有多个Activity需要获取到这个手表改变的状态,然后根据状态进行相应的处理。

功能实现

首先在Application里面

    override fun onCreate() {
        super.onCreate()
        instance = this
        br = WatchConnectLiveData.getInstance()
    }


    override fun onTerminate() {
        br.unRegisterReceiver()
        super.onTerminate()
    }

    @SuppressLint("StaticFieldLeak")
    companion object {

        @SuppressLint("StaticFieldLeak")
        private lateinit var instance: MyApplication
        fun getInstance(): MyApplication {
            return instance
        }

        private lateinit var br: WatchConnectLiveData

        fun getBroadcastLiveData(): WatchConnectLiveData {
            return br
        }
    }

我们创建WatchConnectLiveData类,继承LiveData

public class WatchConnectLiveData extends LiveData<Integer> {

    private static WatchConnectLiveData instance;
    private BroadcastReceiver broadcastReceiver;

    public synchronized static WatchConnectLiveData getInstance() {
        if (instance == null) {
            instance = new WatchConnectLiveData();
        }
        return instance;
    }

    private WatchConnectLiveData() {
        broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent != null) {
                    int state = intent.getIntExtra("state", -1);
                    Log.e("手表连接状态", "此时状态为:" + state);
                    postValue(state);
                }
            }
        };
        // 注册广播接收器
        registerReceiver();
    }

    @Override
    protected void onActive() {
        Log.e("TAG", "当有观察者时调用此方法");
        if (broadcastReceiver == null) {
            registerReceiver();
        }
    }

    @Override
    protected void onInactive() {
        Log.e("TAG", "观察者没了");
    }

    private void registerReceiver() {
        // 注册广播接收器
        IntentFilter intentFilter = new IntentFilter("com.xxxxx.xxxxx.action.CONNECTION_STATE_CHANGED");
        MyApplication.Companion.getInstance().registerReceiver(broadcastReceiver, intentFilter);
    }

    public void unRegisterReceiver() {
        if (broadcastReceiver != null) {
            MyApplication.Companion.getInstance().unregisterReceiver(broadcastReceiver);
            broadcastReceiver = null;
        }
    }
}

这样在程序启动的时候,我们就创建了一个全局的观察者,当此广播有数据发生变化的时候,我们就可以通过livedata进行获取到状态的改变文章来源地址https://www.toymoban.com/news/detail-531746.html

MyApplication.getBroadcastLiveData().observe(viewLifecycleOwner) {
    Log.e(TAG, "状态===>>> $it <<<===")
    //根据相应的状态进行数据处理和操作
    
}

到了这里,关于【Android】LiveData在广播中的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(四)

    前面,经过LiveData的使用、自我编程实现LiveData框架、Jetpack LiveData源码探索几节的学习,相信大家都收益匪浅。 Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(一) Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(二) Android Jetpack 从使用到源码深耕【Li

    2024年02月04日
    浏览(33)
  • Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(二)

    上文,我们就一个实例需求,引入了LiveData进行了实现,大家通过前后的编码实现方案对比,可以感受到LiveData的好用。不由的为jetpack组件的开发者点赞。 Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】(一) Android Jetpack 从使用到源码深耕【LiveData 从实践到原理 】

    2024年02月08日
    浏览(25)
  • Android 广播使用详解(Broadcast Receivers)

    广播接收器用于响应来自其他应用程序或者系统的广播消息。这些消息有时被称为事件或者意图。例如,应用程序可以初始化广播来让其他的应用程序知道一些数据已经被下载到设备,并可以为他们所用。这样广播接收器可以定义适当的动作来拦截这些通信。 有以下两个重要

    2024年02月05日
    浏览(31)
  • Android架构组件LiveData

    LiveData LiveData是基于观察者模式创建的,其中,LiveData是被观察者,观察者通过注册方法,监听被观察者的数据变化。LiveData在数据发生变化的时候,会通知观察者。 LiveData是一个容器,存放数据的容器,它的数据变化可以被监听,也就是LiveData是一个被观察者,如下,创建了一

    2024年02月13日
    浏览(24)
  • Android系统的问题分析笔记(9) - Android 中的 Uri 如何使用呢 ?

    Android 中常用的 uri 如何使用呢 ?(此篇分析基础为Android 7.1.1系统源码),参看Android官方说明:https://developer.android.com/reference/android/net/Uri,代码可在此查看:https://github.com/LineageOS/android_frameworks_base/blob/lineage-20.0/core/java/android/net/Uri.java   通用资源标志符 URI (Universal Resour

    2024年02月09日
    浏览(39)
  • Android JetPack深入分析LiveData源码

    Google Android开发者 LiveData概览 在了解 LiveData 源码之前,建议先了解 LifeCycle 相关知识,请参考:Android JetPack深入分析Lifecycle源码 定义 从定义中,我们可以大概知道: LiveData 是一个数据存储类,能够感知 Activity 、 Fragment 等组件的生命周期,并且支持对它存储的数据进行观察

    2024年02月12日
    浏览(30)
  • [Android Studio]Android 数据存储-文件存储学习笔记-结合保存QQ账户与密码存储到指定文件中的演练

     🟧🟨🟩🟦🟪 Android Debug 🟧🟨🟩🟦🟪 Topic   发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 🪁文件存储 💾内部存储 📀存储数据到文件 💿从文件中读取数据 💯实战演练--保存QQ账号与密码 📖acticity_main.xml布局文件  📖 FileSave

    2023年04月14日
    浏览(37)
  • Android JetPack~LiveData(二) 数据倒灌问题

    Android数据绑定技术一,企业级开发 Android数据绑定技术二,企业级开发 Android  JetPack~ DataBinding(数据绑定)(一)    集成与使用 Android  JetPack~ LiveData (一)   介绍与使用 Android JetPack~LiveData(二) 数据倒灌问题 Android  JetPack~ ViewModel (一)   介绍与使用 如果我们在一个home页面获取网络

    2024年02月02日
    浏览(30)
  • Android资深工程书之LiveData核心组件原理剖析

    LiveData是Android架构组件库中的一个类,用于在应用程序组件之间共享数据。它是一种可观察的数据持有者,可以感知应用程序组件的生命周期,并在数据发生变化时通知观察者。 在Android应用程序中使用LiveData,你可以按照以下步骤进行: 创建LiveData实例: 在ViewModel类中创建

    2024年02月12日
    浏览(28)
  • Android-Jetpack>;>; LiveData粘性数据

    米哈游校招技术提前批来啦 靠谱内推,全程跟进! 有需要的小伙伴可以帮忙辅导简历哈! 投递后可私信我跟进~ 内推码:NE449    入职 南大通用 个人感受 Hello啊各位朋友们,这里先说一下个人情况吧,我是河北工业大学23届的本科生,计算机本专业的。然后我是春招进的南

    2024年02月17日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包