一、           Sd卡挂载主要ACTION

ACTION_MEDIA_BAD_REMOVAL

sd卡已经从sd卡插槽拔出,但是挂载点还没解除

ACTION_MEDIA_BUTTON

“媒体”按钮被按下

ACTION_MEDIA_CHECKING

存在外部媒体,磁盘检查挂载点的路径中包含的检查媒体意图

ACTION_MEDIA_EJECT

用户移除外部存储媒体

ACTION_MEDIA_MOUNTED

Sd卡被插入,且已经挂载

ACTION_MEDIA_NOFS

外部媒体存在,而是使用一个不兼容的fs(或者是空白)挂载点的路径中包含的检查媒体意图

ACTION_MEDIA_REMOVED

Sd卡被移除

ACTION_MEDIA_SCANNER_FINISHED

扫描完成

ACTION_MEDIA_SCANNER_STARTED

开始扫描

ACTION_MEDIA_SCANNER_SCAN_FILE

请求媒体扫描仪扫描一个文件,并将它添加到媒体数据库

ACTION_MEDIA_SHARED

Sd卡作为USB大容量存储被共享,挂载被解除

ACTION_MEDIA_UNMOUNTABLE

ACTION_MEDIA_UNMOUNTED

Sd卡存在,但还没有挂载

一、           热插拔sd卡

1.       直接拔掉sdcard

BroadcastReceiver.android.intent.action.MEDIA_UNMOUNTED

BroadcastReceiver.android.intent.action.MEDIA_BAD_REMOVAL

BroadcastReceiver.android.intent.action.MEDIA_EJECT

BroadcastReceiver.android.intent.action.MEDIA_SCANNER_STARTED

BroadcastReceiver.android.intent.action.MEDIA_SCANNER_FINISHED

2.       再次插入sd卡

BroadcastReceiver.android.intent.action.MEDIA_CHECKING

BroadcastReceiver.android.intent.action.MEDIA_MOUNTED

BroadcastReceiver.android.intent.action.MEDIA_SCANNER_STARTED

BroadcastReceiver.android.intent.action.MEDIA_SCANNER_FINISHED

3.       在通知栏卸载sdcard

BroadcastReceiver.android.intent.action.MEDIA_EJECT

BroadcastReceiver.android.intent.action.MEDIA_UNMOUNTED

注意:接收到 ACTION_MEDIA_EJECT 广播之后,sd 卡还是可以读写的,

直到接收到 ACTION_MEDIA_REMOVED、ACTION_MEDIA_UNMOUNTED等广播之后,sd 卡才不可以读写。

二、           Sd卡示例

1.       获取sd卡路径

public static String getSDPath(Context context) {

String sd = null;

StorageManager storageManager = (StorageManager) context

.getSystemService(Context.STORAGE_SERVICE);

StorageVolume[] volumes = storageManager.getVolumeList();

for (int i = 0; i < volumes.length; i++) {

if (volumes[i].isRemovable()&& volumes[i].allowMassStorage()

&& volumes[i].getDescription(context).contains("SD")) {

sd = volumes[i].getPath();

}

}

return sd;

}

2. 编写广播接收器

public void registerReceivers(){

if(mReceiver == null){

mReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

Log.i("usb", "BroadcastReceiver."+ intent.getAction());

String action = intent.getAction();

if(action.equals("android.intent.action.MEDIA_CHECKING")){

Toast.makeText(context, "sdcard MEDIA_CHECKING",0).show();

//updateListMounted();01-01 09:20:41.663: I/usb(14544):path:/storage/emulated/0

/*String path = getSDPath(context);

Log.i("liting","path = " + path);

MediaScannerConnection.scanFile(context,

newString[]{path + "/DICM"},

null,null);

updateListMounted();*/

ad.start();

loading_layout.setVisibility(View.VISIBLE);

list_layout.setVisibility(View.INVISIBLE);

loading_text.setVisibility(View.VISIBLE);

}else if(action.equals("android.intent.action.MEDIA_SCANNER_FINISHED")){

Toast.makeText(context, "sdcard MEDIA_SCANNER_FINISHED", 0).show();

if(ad.isRunning()){

ad.stop();

loading_layout.setVisibility(View.INVISIBLE);

list_layout.setVisibility(View.VISIBLE);

loading_text.setVisibility(View.INVISIBLE);

}

}else if(action.equals("android.intent.action.ACTION_MEDIA_UNMOUNTED")){

Toast.makeText(context, "sdcard ACTION_MEDIA_UNMOUNTED", 0).show();

if(ad.isRunning()){

ad.stop();

loading_layout.setVisibility(View.INVISIBLE);

}

}

}

};

final IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);

filter.addAction(Intent.ACTION_MEDIA_BUTTON);

filter.addAction(Intent.ACTION_MEDIA_CHECKING);

filter.addAction(Intent.ACTION_MEDIA_EJECT);

filter.addAction(Intent.ACTION_MEDIA_MOUNTED);

filter.addAction(Intent.ACTION_MEDIA_NOFS);

filter.addAction(Intent.ACTION_MEDIA_REMOVED);

filter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);

filter.addAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

filter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);

filter.addAction(Intent.ACTION_MEDIA_UNMOUNTABLE);

filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);

filter.addAction(Intent.ACTION_MEDIA_SHARED);

filter.addDataScheme("file");

registerReceiver(mReceiver, filter);

}

}

3. 注册/取消注册广播监听器

四、     媒体数据库刷新

1. 手动扫描刷新

当android的系统启动的时候,系统会自动扫描sdcard内的文件,并把获得的媒体文件信息保存在一个系统媒体数据库中,程序想要访问多媒体文件,就可以直接访问媒体数据库中即可,而用直接去sdcard中取。但是,如果系统在不重新启动情况下,媒体数据库信息是不会更新的,这里举个例子,当应用程序保存一张图片到本地后(已成功),但打开系统图片库查看时候,你会发现图片库内并没有你刚刚保存的那张图片,原因就在于系统媒体库没有及时更新,这时就需要手动刷新文件系统了。

2. 自动刷新

在后视镜的视频回放中,热插拔sd卡,当插上sd卡时,sd卡会扫描好久的数据库。通过log分析,在MEDIA_SCANNER_STARTED到MEDIA_SCANNER_FINISHED之间花费了太久的时间。如此提高系统扫描的速度呢?

\packages\providers\MediaProvider\src\com\android\providers\media\MediaScannerService.java

Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND+

Process.THRE

AD_PRIORITY_LESS_FAVORABLE);将值降低

Android SD卡挂载状态相关推荐

  1. android sd卡挂载广播,Android--检测内置/外置SD卡存储卡,枚举所有挂载点(通过反射实现),监听SD卡广播...

    直接上重点: 1:获取内置SD卡的路径, 但是判断是否有效(是否挂载), 需要用到下面检测挂载点的方法 /** * 获取内置SD卡路径 * * @return */ public String get ...

  2. android sd卡挂载命令,android - 从android中的adb shell手动挂载SD卡 - 堆栈内存溢出

    我有一个Android 4.1手机(联想820). 经过一些旨在对内部SD ram进行分区的更改(更改后,手机将不再安装外部 SD卡.我很擅长Linux,但我从未见过Android shell. 我很 ...

  3. Android存储设备(U盘,SD卡)状态监测(《Android 2.3 SD卡挂载流程浅析1234567)

    我们是以DV6300-T的平台来做测试的,发现有2种方式来检测android中external media(包括SD卡,USB)的状态. 一种是使用StorageListener监听,还有一种是使用广 ...

  4. android vold初始化及sd卡挂载流程(转载)

    1 总体介绍 在Android 中,当SD卡插入系统之后,系统会自动挂载.Vold 就是负责挂载SD卡的,vold 的全称是volume daemon.实际上是负责完成系统的CDROM,USB 大容量 ...

  5. android sd 挂载流程_Android7.0 SD卡挂载流程

    Android7.0 SD卡挂载流程 序言:这是7.0时候的总结,8.0MountService改名成了StorageManageService,懒得再重新总结,直接把7.0的总结贴上 这篇文章是对上 ...

  6. android sd卡无法挂载,内外SD卡无法挂载的BUG修复方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我们在对安卓ROM进行移植的时候,因为移植相对来说比较麻烦,经常会出现很多的问题,特别是常出现的一个问题,就是ROM移植之后无法挂载内外SD卡.接下来就来 ...

  7. Android 2.3 SD卡挂载流程浅析(三)

    在前面两篇博文<Android 2.3 SD卡挂载流程浅析(一)><Android 2.3 SD卡挂载流程浅析(二)>中,主要简单介绍了SD卡的挂载流程以及所涉及的关键文件.在 ...

  8. Android7.0 SD卡挂载流程

    Android7.0 SD卡挂载流程 序言:这是7.0时候的总结,8.0MountService改名成了StorageManageService,懒得再重新总结,直接把7.0的总结贴上 这篇文章是对上 ...

  9. android SD卡相关

    另外文章   http://blog.csdn.net/Fybon/article/details/25904215 Android 外部存储权限分析 http://blog.csdn.net/zjb ...

最新文章

  1. 互联网协议 — TCP — 滑动窗口(网络质量保障)
  2. vim编辑器高级应用
  3. 如何学好Java?你应该躲开这几个坑
  4. boost::log模块实现格式化程序流的测试程序
  5. vue 父组建获取子组建方法为获得_Vue父子组件状态同步的最佳方式
  6. scala类型推断及库方法设计原则和==与java有何差别
  7. C++实现utf8和gbk编码字符串互相转换
  8. Linux学习笔记-增量编译(Makefile进一步使用)
  9. 使用vue完成一个分页效果
  10. 消息驱动式微服务:Spring Cloud Stream RabbitMQ
  11. 第九届蓝桥杯B组省赛。
  12. CC1310直接操作寄存器编程
  13. bulter机器人_机器人库早报|特拉华大学通过人工智能扩大发展劳动力 1.5 倍
  14. 微信支付的分账功能介绍
  15. Mac下解决硬盘无法读取问题Mounty for NTFS - 免费让 Mac 原生支持移动硬盘/U盘 NTFS 读写的必备驱动应用
  16. ConcurrentHashMap源码深度解析(一)(java8)——不可不知的基本概念(助你拿下源码事半功倍)
  17. c语言输入1到12月份,C语言高手请进下面是一个日历表,运行结果中能不能把1~12月份改 爱问知识人...
  18. 小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 3)
  19. 2022年最流行的几款软件缺陷管理工具
  20. 天才少年!他们的内心世界你懂吗?道翰天琼认知智能机器人平台API接口为您揭秘-1。

热门文章

  1. 电脑PIN码忘记怎么办?
  2. Flutter的原理及美团的实践!
  3. Docker 使用超详细 (精通级)
  4. 2013元旦快乐--30自制操作系统之第1天--从计算机结构到汇编程序入门(先熟悉熟悉)
  5. 计算机学院运动会通讯稿,学院运动会通讯稿
  6. 机器人大作战-oj选拔题(七道题-题目及源代码)
  7. 大专计算机两年好还是三年好,同样是大专学历,3年制和5年制差距明显,其实应该早知道...
  8. jquery 获取鼠标点击的位置坐标
  9. 计算机绘图线型标准,计算机绘图图层设置和线型宽度.doc
  10. 天地图--根据关键字本地搜索