Sdcard插拔、状态广播监听,Android文件系统,Android存储器相关知识总结
一 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存储器相关知识总结的更多相关文章
- Android开发之使用广播监听网络状态变化
我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示.如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听. ...
- android电话状态的监听
电话状态的监听: /*** * 继承PhoneStateListener类,我们能够又一次其内部的各种监听方法 然后通过手机状态改变时,系统自己主动触发这些方法来实现我们想要的功能 */ class ...
- 对于HDMI设备连接状态的监听
对与最近主要做的是电视机盒子端的开发,其中涉及到设备的状态监听比较繁琐,所以对HDMI的连接状态的监听方法做个记录,方便后续查看. 主要通过两种方式: (1)比较常用的广播监听 注册一个动态广播来获取 ...
- Android手机使用广播监听手机收到的短信
我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态 ...
- Android中定义广播监听,其他页面发送
private LocalBroadcastManager broadcastManager; /** * 注册广播接收器 */ private void receiveAdDownload() { ...
- Android studio之广播监听接收短信
一. 在清单文件中(AndroidManifest.xml)添加短信权限 这里我用的android studio版本是3.3的 <uses-permission android:name=&qu ...
- 监听TelephonyManager的通话状态来监听手机的所有的来电
import java.io.FileNotFoundException;import java.io.OutputStream;import java.io.PrintStream;import j ...
- Android-应用安装/替换/卸载/广播监听
在上一篇博客Android-开关机的广播,中介绍了,如何订阅接收者,去接收系统发送的开机/关机广播, 而这篇博客是订阅接收者 去接收应用的(安装/替换/卸载) 三种广播 订阅 接收者 去接收 应用的 ...
- 事件监听:诀别Android繁琐的事件注册机制——view.setOnXXXXListener
本版本为1.0,支持较少,使用不够方便.相关封装逻辑结构已升级至2.0,详情可参见:更完善的安卓事件监听实现 先简单扯两句这几天学习下来对java事件监听机制的一点感触.客观地讲,java的事件监听机 ...
随机推荐
- SpringBoot与日志框架2(日志内斗)
一.SpringBoot如何引入slf4j+logback框架的呢? 在POM文件中 <dependency> <groupId>org.springframework.boo ...
- Linux学习之文件系统权限及表示
三类人 用户主(user:u):文件的所有者 同组人(group:g):与文件主同组的用户 其他人(other:o):除用户主和同组人外的其他所有人 三种权限 读权限(r):指用户对文件或目录的读许可 ...
- vs编译OpenGL项目,出现无法打开 源 文件 "gl\glaux.h的解决办法
问题如图: 原因: 缺少编译OpenGL的头文件和库: 解决办法: 1.下载OpenGL的头文件和库: 下载地址:https://download.csdn.net/download/ssagnn23 ...
- javascript 数据类型 -- 检测
一.前言 在上一篇博文中 Javascript 数据类型 -- 分类 中,我们梳理了 javascript 的基本类型和引用类型,并提到了一些冷知识.大概的知识框架如下: 这篇博文就讲一下在写代码的过 ...
- python利用xlrd读取excel文件始终报错原因
1.代码按照网上百度的格式进行书写如下: 但运行后,始终报错如下: 百度了xlrd网页: 分明支持xls和xlsx两种格式的文件,但运行始终报错. 最后找到原因是因为我所读取的文件虽然是以.xls命名 ...
- C# 计算地图上某个坐标点的到多边形各边的距离
在判断了某个坐标点是否在多边形内后,还有另一个需求就是当我这个坐标点在多边形外部时,我需要计算这个坐标点到多边形的距离是否在一个允许的误差范围内 通过两个位置的经纬度坐标计算距离(C#版本) 转自:h ...
- grafana--邮箱告警配置
安装 wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-6.0.2-1.x86_64.rpm yum l ...
- Java课程之团队开发(团队介绍)
一.介绍团队和团队成员 团队名称:凯域软创 团队成员介绍:张某某,崔某某,焦某某,陈某 二.关于团队作品 1.作品名称:课程表 2.你的创意解决了用户的什么需求:查看课程信息的需求 3.你有什么招数用 ...
- Mac自动化环境
1. JDK安装 下载JDK for Mac 我这里使用的是 jdk-7u79-macosx-x64.dmg 验证安装open Terminal java -version java versio ...
- CentOS 编译安装 Redis (实测 笔记 Centos 7.3 + redis 3.2.8)
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...