一 SDcard广播监听,注册,取消注册的实现

(1)根据实际需要监听的事件,添加action,并注册,一般在onCreate中添加

  //在IntentFilter中选择你要监听的行为
IntentFilter intentFilter = new IntentFilter();
intentFilter.setPriority(1000);// 设置最高优先级
//插入SD卡并且已正确安装(识别)时发出的广播。广播:扩展介质被插入,而且已经被挂载。
intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
//已拔掉外部大容量储存设备发出的广播(比如SD卡,或移动硬盘),不管有没有正确卸载都会发出此广播;广播:用户欲卸载SD卡,但是SD卡上的部分内容尚处于打开状态(准备拔掉扩展卡,物理拔除)
intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);
//广播:扩展介质存在,但是还没有被挂载 (mount)
intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
//外部储存设备已被移除,不管有没正确卸载,都会发出此广播。广播:扩展介质被移除(已经物理拔除)
intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
//广播:扩展介质的挂载被解除 (unmount),因为它已经作为 USB 大容量存储被共享
intentFilter.addAction(Intent.ACTION_MEDIA_SHARED);
//未正确移除SD卡(正确移除SD卡的方法:设置--SD卡和设备内存--卸载SD卡),但已把SD卡取出来时发出的广播
//广播:扩展介质(扩展卡)已经从 SD 卡插槽拔出,但是挂载点 (mount point) 还没解除 (unmount)
intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
//广播:开始扫描介质的一个目录
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
//广播:已经扫描完介质的一个目录
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
//按下"Media Button" 按键时发出的广播,假如有"Media Button"按键的话(硬件按键)
intentFilter.addAction(Intent.ACTION_MEDIA_BUTTON);//
//插入外部储存装置,比如SD卡时,系统会检验SD卡,此时发出的广播
intentFilter.addAction(Intent.ACTION_MEDIA_CHECKING);
//拓展介质存在,但使用不兼容FS(或为空)的路径安装点检查介质包含在Intent.mData领域。
intentFilter.addAction(Intent.ACTION_MEDIA_NOFS);//
//检测没有问题,将扫描单个文件
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
//表示SD卡存在,但是无法挂载
intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTABLE);
intentFilter.addDataScheme("file");
registerReceiver(broadcastRec, intentFilter);//注册监听函数
(2)实例化一个广播实例
  private final BroadcastReceiver broadcastRec = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i(TAG, "action=" + action);
}
};
(3)注销广播 unregisterReceiver(broadcastRec); 一般在OnDestory()方法中完成  
(4)系统源码action值对应关系
ACTION_MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL";
ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON";
ACTION_MEDIA_CHECKING = "android.intent.action.MEDIA_CHECKING";
ACTION_MEDIA_EJECT = "android.intent.action.MEDIA_EJECT";
ACTION_MEDIA_MOUNTED = "android.intent.action.MEDIA_MOUNTED";
ACTION_MEDIA_NOFS = "android.intent.action.MEDIA_NOFS";
ACTION_MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED";
ACTION_MEDIA_SCANNER_FINISHED = "android.intent.action.MEDIA_SCANNER_FINISHED
ACTION_MEDIA_SCANNER_SCAN_FILE = "android.intent.action.MEDIA_SCANNER_SCAN_FI
ACTION_MEDIA_SCANNER_STARTED = "android.intent.action.MEDIA_SCANNER_STARTED";
ACTION_MEDIA_SHARED = "android.intent.action.MEDIA_SHARED";
ACTION_MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE";
ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED"; 二 SDcard不同操作情况下的广播事件
(1)插入SDcard
MEDIA_CHECKING --> MEDIA_MOUNTED --> MEDIA_SCANNER_STARTED --> MEDIA_SCANNER_FINISHED
(2)物理拔除SDcard
MEDIA_EJECT --> MEDIA_EJECT(不清楚为什么会发出两次该广播,但测试时确实如此) --> MEDIA_SCANNER_STARTED(后面会多次调用) --> MEDIA_SCANNER_FINISHED
--> MEDIA_SCANNER_STARTED --> MEDIA_UNMOUNTED --> MEDIA_BAD_REMOVAL --> MEDIA_SCANNER_FINISHED --> MEDIA_SCANNER_STARTED --> MEDIA_SCANNER_FINISHED
说明:① MEDIA_EJECT 不清楚为什么会发出两次该广播,但测试时确实如此
② MEDIA_SCANNER_STARTED 和 MEDIA_SCANNER_FINISHED 会被调用多次
    

Sdcard插拔、状态广播监听,Android文件系统,Android存储器相关知识总结的更多相关文章

  1. Android开发之使用广播监听网络状态变化

    我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示.如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听. ...

  2. android电话状态的监听

    电话状态的监听: /*** * 继承PhoneStateListener类,我们能够又一次其内部的各种监听方法 然后通过手机状态改变时,系统自己主动触发这些方法来实现我们想要的功能 */ class ...

  3. 对于HDMI设备连接状态的监听

    对与最近主要做的是电视机盒子端的开发,其中涉及到设备的状态监听比较繁琐,所以对HDMI的连接状态的监听方法做个记录,方便后续查看. 主要通过两种方式: (1)比较常用的广播监听 注册一个动态广播来获取 ...

  4. Android手机使用广播监听手机收到的短信

    我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态 ...

  5. Android中定义广播监听,其他页面发送

    private LocalBroadcastManager broadcastManager; /** * 注册广播接收器 */ private void receiveAdDownload() { ...

  6. Android studio之广播监听接收短信

    一. 在清单文件中(AndroidManifest.xml)添加短信权限 这里我用的android studio版本是3.3的 <uses-permission android:name=&qu ...

  7. 监听TelephonyManager的通话状态来监听手机的所有的来电

    import java.io.FileNotFoundException;import java.io.OutputStream;import java.io.PrintStream;import j ...

  8. Android-应用安装/替换/卸载/广播监听

    在上一篇博客Android-开关机的广播,中介绍了,如何订阅接收者,去接收系统发送的开机/关机广播, 而这篇博客是订阅接收者 去接收应用的(安装/替换/卸载) 三种广播 订阅 接收者 去接收 应用的 ...

  9. 事件监听:诀别Android繁琐的事件注册机制——view.setOnXXXXListener

    本版本为1.0,支持较少,使用不够方便.相关封装逻辑结构已升级至2.0,详情可参见:更完善的安卓事件监听实现 先简单扯两句这几天学习下来对java事件监听机制的一点感触.客观地讲,java的事件监听机 ...

随机推荐

  1. Kali安装Docker

    ---恢复内容开始--- 第一周 计划安装好docker     准备 审计thinkphp 框架 先把docker 安装的笔记补上 本来是在unbuntu 安装了一遍 并run 了几个镜像和基本操作 ...

  2. 2019工作计划idea

    2019.2.24 工作需求: 汇总 2008-2018年 销售订单数据; 分类历史订单数据, 并可能采取方法进行预测(预测只是一种行为不代表结果) 目前已知条件: 订单生产周期; 45天(标准天数) ...

  3. SpringBoot使用Elastic-Job

    本文介绍SpringBoot整合Elastic-Job分布式调度任务(简单任务). 1.有关Elastic-Job Elastic-Job是当当网开源的分布式任务调度解决方案,是业内使用较多的分布式调 ...

  4. hdu1814 Peaceful Commission

    hdu1814 Peaceful Commission 题意:2-sat裸题,打印字典序最小的 我写了三个 染色做法,正解 scc做法,不管字典序 scc做法,错误的字典序贪心 #include &l ...

  5. springboot添加多数据源连接池并配置Mybatis

    springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018  ...

  6. C#调用Interrop.excel导出Excel文件失败解决方案

    最近操作员反馈系统在导出Excel时失败,有抛出如下异常:系统错误信息:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失 ...

  7. vue 图片预览插件

    https://github.com/daidaitu1314/vue2-preview //cnpm cnpm install vue2-preview -save //引入 import VueP ...

  8. Recycle移动端界面设计成果图

    经过功能分析,我最终设计出来了该App界面图: (1)主页面图 (2)消息界面图 (3)我的界面图 (4)垃圾页面图 由于时间原因,此次设计仅为初稿.以后会继续抽出时间,与团队成员一起完善该项目App ...

  9. 压力测试工具 ab

    ab 是Apache 自带的一个压力测试工具,命令行,是 ApacheBench 命令的缩写. ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问.它的测试目标是基 ...

  10. mysql 主从设置

    方法: 1.主服务器建立二进制日志,每产生语句或磁盘变化,写进日志 2.从服务器建立 relaylog日志 3.主服务器授权复制账号 4.从服务器利用复制账号来监听主服务器的日志 5.注意:所以的my ...