一 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. 【C语言编程练习】新娘与新郎

    1. 题目要求 新郎A,B,C与新娘 X,Y,Z.有人不知道她们谁和谁结婚了,询问了6位新人中的三位,A说他将和X结婚,X说她的未婚夫是C,C说她会和Z结婚,一听就知道是全是假话,请编程找出谁和谁结婚 ...

  2. Y1吐槽001 怎么做产品

    做一个产品,这个产品是做给用户用的还是做给领导看的完全是两个不同的出发点..做给领导看有好处,毕竟领导有知道进展的权利和指导方向的作用,还有一个好处就是表现得好. 忽略了使用者的感受是非常致命的,标模 ...

  3. git commit时暂时忽略已提交的文件

    当正在修改某文件A,此时需要commit,但是A没修改完暂时不能一起commit. 执行: git update-index --assume-unchanged A的路径 git暂时会忽略该文件的修 ...

  4. 蛤?你要用html做游戏?(笔记版)

    标签(空格分隔):canvas html game 本书是看<html5 Canvas游戏开发实战>(2013)笔记 博主小白,啥也不懂类型,这只是一个笔记,需要的话可以看原书. 书张这样 ...

  5. python练习题目

    1.查看本机安装python版本 2.用python打印"Hello World",给出源代码和执行结果 a.命令行窗口输出(前提:python程序加入PATH系统环境变量) b. ...

  6. NOIP-螺旋矩阵

    题目描述 一个 n 行 n 列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵中所有格 ...

  7. Round #3

    题源:感谢 by hzwer 水灾(sliker.cpp/c/pas) 1000MS  64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的 ...

  8. java DTO对象与PO对象的相互转换

    2018-09-27 10:27:50 前言: 在实际开发中往往需要DTO对象与PO对象的相互转换: 先说说什么是DTO对象吧,个人觉得DTO就是PO的扩展而已,PO专门指向数据库,DTO作扩展(字段 ...

  9. Django之csrf防御机制

    1.csrf攻击过程 csrf攻击说明: 1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A; 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站 ...

  10. go语言的for循环

    for循环是一个循环控制结构,可以执行指定次数的循环. 三种循环方式 第一种,常见的 for 循环,支持初始化语句 for init; condition; post { } init: 一般为赋值表 ...