Android 使用registerReceiver注册BroadcastReceiver案例详解

android.context.ContextWrapper.registerReceiver

public Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter) 

Register a BroadcastReceiver to be run in the main activity thread. The receiver will be called with any broadcast Intent that matches filter, in the main application thread.

Parameters

receiver  The BroadcastReceiver to handle the broadcast.
filter  Selects the Intent broadcasts to be received.

Returns

The first sticky intent found that matches filter, or null if there are none.

定义变量一

private SDStateMonitorReceiver sdStateReceiver; //SDcard状态监测
private LogTaskReceiver logTaskReceiver;

定义变量二

private static String MONITOR_LOG_SIZE_ACTION = "MONITOR_LOG_SIZE";        //日志文件监测action
private static String SWITCH_LOG_FILE_ACTION = "SWITCH_LOG_FILE_ACTION";    //切换日志文件action

定义变量三

private final int SDCARD_TYPE = 0;            //当前的日志记录类型为存储在SD卡下面
private final int MEMORY_TYPE = 1;            //当前的日志记录类型为存储在内存中
private int CURR_LOG_TYPE = SDCARD_TYPE;    //当前的日志记录类型

定义方法register

private void register(){
    IntentFilter sdCarMonitorFilter = new IntentFilter();
    sdCarMonitorFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
    sdCarMonitorFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
    sdCarMonitorFilter.addDataScheme("file");
    sdStateReceiver = new SDStateMonitorReceiver();
    registerReceiver(sdStateReceiver, sdCarMonitorFilter);

    IntentFilter logTaskFilter = new IntentFilter();
    logTaskFilter.addAction(MONITOR_LOG_SIZE_ACTION);
    logTaskFilter.addAction(SWITCH_LOG_FILE_ACTION);
    logTaskReceiver = new LogTaskReceiver();
    registerReceiver(logTaskReceiver,logTaskFilter);
}

定义BroadcastReceiver的子类SDStateMonitorReceiver

/**
 * 监控SD卡状态
 */
class SDStateMonitorReceiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {

        if(Intent.ACTION_MEDIA_UNMOUNTED.equals(intent.getAction())){    //存储卡被卸载
            if(CURR_LOG_TYPE == SDCARD_TYPE){
                Log.d(TAG, "SDcar is UNMOUNTED");
                CURR_LOG_TYPE = MEMORY_TYPE;
                new LogCollectorThread().start();
            }
        }else{                                                            //存储卡被挂载
            if(CURR_LOG_TYPE == MEMORY_TYPE){
                Log.d(TAG, "SDcar is MOUNTED");
                CURR_LOG_TYPE = SDCARD_TYPE;
                new LogCollectorThread().start();

            }
        }
    }
}

定义BroadcastReceiver子类LogTaskReceiver

/**
 * 日志任务接收
 * 切换日志,监控日志大小
 */
class LogTaskReceiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(SWITCH_LOG_FILE_ACTION.equals(action)){
            new LogCollectorThread().start();
        }else if(MONITOR_LOG_SIZE_ACTION.equals(action)){
            checkLogSize();
        }
    }
}

在onCreate方法中调用register方法。

在onDestroy方法中执行语句

unregisterReceiver(sdStateReceiver);
unregisterReceiver(logTaskReceiver);

到此这篇关于Android 使用registerReceiver注册BroadcastReceiver案例详解的文章就介绍到这了,更多相关Android 使用registerReceiver注册BroadcastReceiver内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android自定义view之利用drawArc方法实现动态效果(思路详解)

    目录 前言 一.准备 1.测量 2.初始化画笔 3.自定义属性 二.关键方法介绍 drawArc 三.实现 1.思路 2.效果图 前言 前几天看了一位字节Android工程师的一篇博客,他实现的是歌词上下滚动的效果,实现的关键就是定义一个偏移量,然后根据情况去修改这个值,最后触发View的重绘来达到效果.于是今天根据这个思路来写一篇简单的文章.欢迎留言 一.准备 在这之前呢,还是得简单描述一下自定义view中的一些准备工作 1.测量 @Override protected void onSize

  • Android多返回栈技术

    目录 1.系统返回按钮的乐趣 2.Fragment 中的多返回栈 3.排除 Fragment 在技术上的障碍 4.Fragment 中值得期待的地方 4.使用 Navigation 将多返回栈适配到任意屏幕类型 5.在 Navigation 中启用多返回栈 5.保存状态,锁定用户 1.系统返回按钮的乐趣 无论您在使用 Android 全新的 手势导航 还是传统的导航栏,用户的 "返回" 操作是 Android 用户体验中关键的一环,把握好返回功能的设计可以使应用更加贴近整个生态系统.

  • Android ExpandableListView使用方法案例详解

    目录 一.前言 二.实现的功能 三.具体代码 1.主xml代码 2.父布局xml代码 3.子布局xml代码 4.主activity代码 5.adapter代码 一.前言   "好记性不如烂笔头",再次验证了这句话是真的很有道理啊,一个月前看了一下ExpandableListView的使用,今天再看居然忘了这个是干啥的了,今天就详细讲解一下ExpandableListView的使用方法,感觉对于二级条目显示功能都可以实现. 二.实现的功能 1.可实现二级列表条目显示功能,具体包括可自定义

  • Android实现声音采集回声与回声消除

    本文实例为大家分享了Android实现声音采集回声与回声消除的具体代码,供大家参考,具体内容如下 一.回声产生的原因 回声(或称回音)是指障碍物对声音的反射.声波在遇到障碍物时,一部分声波会穿过障碍物,而另一部分声波会反射回来形成回声.若障碍物具有坚硬光滑的表面易产生回声:反之,具有柔软的表面则易吸收声音:另外,粗糙的表面易散射声音.回声相比那些直接传播的声音所经过的路程更长,所以会比直接传播的声音晚被听到.如果两列声波的时间间隔小于0.1秒,人耳边无法分辨,只能听到被延长的声音.因为室温(20

  • Android实现简单点赞动画

    思路 找到Activity中DecorView的RootView 确定点赞控件位于屏幕中的坐标值 将点赞效果View加入到RootView中, 给效果View添加自己想要的动画效果. 重复点击时候, 需要将效果View先移除掉再重新加入到RootView中. 代码 /**  * 普通点赞效果, 点击控件后出现一个View上浮  */ public class ViewLikeUtils {     public interface ViewLikeClickListener {        

  • Android端权限隐私的合规化处理实战记录

    目录 是什么 为什么 具体实践 一.Android各版本对权限的适配处理 1.1 早期的注册权限 1.2 动态权限授予 1.3 READ_PHONE_STATE权限的变化 二.隐私信息合规化处理 2.1 隐私信息获取告知的直接化和透明化 2.2 隐私信息获取和传输的安全化 2.3 部分隐私Api调用的严格化 三.遇到的一些问题和坑 总结 是什么 对客户端而言,权限隐私可分为权限和隐私两个大的方面. 权限为用户通过app内弹窗设置或者手机设置内对应app的权限设置方式给予对应app相应的权限,如电

  • Android Broadcast原理分析之registerReceiver详解

    目录 1. BroadcastReceiver概述 2. BroadcastReceiver分类 3. registerReceiver流程图 4. 源码解析 4.1 ContextImpl.registerReceiverInternal 4.2 LoadedApk.getReceiverDispatcher 4.3 ActivityManagerService.registerReceiver 5. 总结 1. BroadcastReceiver概述 广播作为四大组件之一,在平时开发过程中会

  • Android Intent与IntentFilter案例详解

    1. 前言        在Android中有四大组件,这些组件中有三个组件与Intent相关,可见Intent在Android整个生态中的地位高度.Intent是信息的载体,用它可以去请求组件做相应的操作,但是相对于这个功能,Intent本身的结构更值得我们去研究. 2. Intent与组件        Intent促进了组件之间的交互,这对于开发者非常重要,而且它还能做为消息的载体,去指导组件做出相应的行为,也就是说Intent可以携带数据,传递给Activity/Service/Broa

  • Android 使用registerReceiver注册BroadcastReceiver案例详解

    android.context.ContextWrapper.registerReceiver public Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter) Register a BroadcastReceiver to be run in the main activity thread. The receiver will be called with any broadcast Intent

  • Android Location服务之LocationManager案例详解

    上次介绍了位置服务中的Geocoder,这次就来介绍一下LocationManager.LocationManager系统服务是位置服务的核心组件,它提供了一系列方法来处理与位置相关的问题,包括查询上一个已知位置.注册和注销来自某个LocationProvider的周期性的位置更新.注册和注销接近某个坐标时对一个已定义的Intent的触发等.今天我们就一起探讨一下LocationManager的简单应用. 在进入正题之前,朋友们需要了解与LocationManager相关的两个知识点: prov

  • Android registerForActivityResult动态申请权限案例详解

    前言 这几天在做一个小工具app,结果在fragment里面动态申请权限提示原有的申请方法已经弃用,还画了很明显的删除线...这叫一个强迫症的我怎么受得了.赶紧网上找资料也找不出什么结果,看了官方文档才发现了有registerForActivityResult这么一个神奇好用的函数,可以代替我们现有的startActivityForResult和权限申请函数. 那么下面就分两种情况来讲一下如何使用这个函数动态申请权限. 一.申请单个权限 首先,我们需要定义一个launcher: Activity

  • Android TextView的TextWatcher使用案例详解

    TextWatcher是一个文本变化监听接口,定义了三个接口,分别是beforeTextChanged,onTextChanged,afterTextCahnged. TextWatcher通常与TextView结合使用,以便在文本变化的不同时机做响应的处理.TextWatcher中三个回调接口都是使用了InputFilter过滤器过滤之后的文字字符作为新的字符对象. 使用方法 mTextView.addTextChangedListener(new TextWatcher(){ @Overri

  • Android notifyDataSetChanged() 动态更新ListView案例详解

    有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://sc

  • Android AlertDialog六种创建方式案例详解

    目录 一.setMessage:设置对话框内容为简单文本内容 二.setItem:设置文本框内容为简单列表项 三.setSingleChoiceItems()设置对话框内容为单选列表项 四.setMultiChoiceItems()设置对话框内容为多选项列表 五.setAdapter()设置对话框内容为自定义列表项(这里是一个布局) 六.setView()设置对话框为自定义View 创建AlertDialog的步骤: 创建AlertDialog.Builder对象 调用Builder对象的set

  • Android AlertDialog多种创建方式案例详解

    目录 一.setMessage:设置对话框内容为简单文本内容 二.setItem:设置文本框内容为简单列表项 三.setSingleChoiceItems()设置对话框内容为单选列表项 四.setMultiChoiceItems()设置对话框内容为多选项列表 五.setAdapter()设置对话框内容为自定义列表项(这里是一个布局) 六.setView()设置对话框为自定义View 创建AlertDialog的步骤: 创建AlertDialog.Builder对象 调用Builder对象的set

  • Android动画之TranslateAnimation用法案例详解

    我们在实际的开发过程中,有很多地方需要使用TranslateAnimation,本文是爱站技术频道小编为大家做的简单介绍,下面是详解Android 动画之TranslateAnimation应用的参数说明,希望对你学习这方面知识有帮助! android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解TranslateAnimati

  • Android mvvm之LiveData原理案例详解

    1. 生命周期感知 1.1 生命周期感知组件 我们知道,Controller(Activity or Fragment) 都是有生命周期的,但是传统的 Controller 实现方式只负责 Controller 本身的生命周期管理,而与业务层的数据之间并没有实现良好解耦的生命周期事件交换.所以业务层都需要自己主动去感知 Controller 生命周期的变化,并在 Controller 的生存期处理数据的保活,而在消亡时刻解除与 Controller 之间的关系,这种处理方式随着业务规模的扩大往往

  • Android AS创建自定义布局案例详解

    先创建一个title.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" andr

随机推荐