Android SD卡挂载状态
来源:互联网 发布:java rtf格式转换pdf 编辑:程序博客网 时间:2024/06/07 07:21
一、 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 (inti = 0; i < volumes.length; i++) {
if (volumes[i].isRemovable()&&volumes[i].allowMassStorage()
&& volumes[i].getDescription(context).contains("SD")) {
sd = volumes[i].getPath();
}
}
returnsd;
}
2. 编写广播接收器
public void registerReceivers(){
if(mReceiver ==null){
mReceiver = new BroadcastReceiver() {
@Override
publicvoid 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);
}elseif(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);
}
}elseif(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 IntentFilterfilter = 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.THREAD_PRIORITY_LESS_FAVORABLE);将值降低
- Android SD卡挂载状态
- android获取SD卡状态
- Android 检测SD卡状态
- Android SD卡状态监听
- android监听SD卡状态
- android 获取sd卡状态
- Android存储设备(U盘,SD卡)状态监测(《Android 2.3 SD卡挂载流程浅析1234567)
- android监听sd卡挂载状态,onReceive无法被调用问题
- Android SD卡操作 (Environment 状态)
- android中sd卡常用状态
- android获取SD卡的状态
- android 获取SD卡状态信息
- Android-监听SD卡状态(BroadcastReceiver)
- Android中判断SD卡状态
- Android检测SD卡的状态
- Android外部应用获取SD卡状态
- Android Broadcast 监听SD卡状态
- android ------ SD卡挂载
- 图的最短路径(三)-单源点最短路径(Dijkstra算法)
- Java的方法传参数永远是值传递
- java基本io流的操作
- java项目之——坦克大战24
- 自定义ViewPager的切换动画ScalePageTransformer
- Android SD卡挂载状态
- 学习DNS之入门篇
- Android 2016 学习新技术
- strstr,strcmp,strlen函数实现
- SPSS——非参数检验——Runs游程检验
- 我做服务器的岁月4
- 15. 3Sum
- 链表的基本操作
- Activity的启动模式以及Intent的七大属性