Android 获取内外置存储卡方法
来源:互联网 发布:淘宝外卖粮票口令分享 编辑:程序博客网 时间:2024/04/29 11:09
以前的Android(4.1之前的版本)中,SDcard跟路径通过“/sdcard”或者“/mnt/sdcard”来表示存储卡,而在Jelly Bean系统中修改为了“/storage/sdcard0”,以后可能还会有多个SDcard的情况。
目前为了保持和之前代码的兼容,sdcard路径做了link映射。
为了使您的代码更加健壮并且能够兼容以后的Android版本和新的设备,请通过Environment.getExternalStorageDirect
如果您需要往sdcard中保存特定类型的内容,可以考虑使用Environment.getExternalStoragePublic
DIRECTORY_DCIM //相机拍摄的图片和视频保存的位置
DIRECTORY_DOWNLOADS //下载文件保存的位置
DIRECTORY_MOVIES //电影保存的位置, 比如 通过google play下载的电影
DIRECTORY_MUSIC //音乐保存的位置
DIRECTORY_NOTIFICATIONS //通知音保存的位置
DIRECTORY_PICTURES //下载的图片保存的位置
DIRECTORY_PODCASTS //用于保存podcast(博客)的音频文件
DIRECTORY_RINGTONES //保存铃声的位置
如果您的应用需要下载以上类型的文件,则可以放到上面对应的目录中去来帮助用户查找,比如最常用的就是下载文件了。如果您开发了一个浏览器,在下载文件的时候把文件下载到Download目录则方便用户以后查找该文件,当然如果你希望用户需要通过启动您的程序来查看他们下载的文件,您也可以不这么做 ^_^。
在使用这些目录保存文件的时候,需要注意一点:其他程序也有可能在使用这些目录,在保存文件前,注意判断下文件是否已经存在,不要覆盖了用户之前的数据。
Android4.1之后Android增加了多存储卡的支持,一般手机会存在内置存储卡和外置存储卡,也可能有多个外置存储卡。如何获取存储卡路径呢?
特别是各种android设备的存储器路径,是不一样的,比如T卡路径,可能是/mnt/sdcard、/mnt/extsd、/mnt/external_sd 或者/mnt/sdcard2。有时内置存储器的路径也可能是/mnt/sdcard,而host usb存储器的路径也是各种各样的。
下面方法是通过反射,调用StorageManager的隐藏接口getVolumePaths(),实现获取存储器列表。
[java]
package ckl.storage.list;
import java.lang.reflect.InvocationTargetExceptio
import java.lang.reflect.Method;
import android.app.Activity;
import android.os.storage.StorageManager;
public class StorageList {
private Activity mActivity;
private StorageManager mStorageManager;
private Method mMethodGetPaths;
public StorageList(Activity activity) {
mActivity = activity;
if (mActivity != null) {
mStorageManager = (StorageManager)mActivity
.getSystemService(Activity.STORAGE_SERVICE);
try {
mMethodGetPaths = mStorageManager.getClass()
.getMethod("getVolumePaths");
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
public String[] getVolumePaths() {
String[] paths = null;
try {
paths = (String[]) mMethodGetPaths.invoke(mStorageManager);
} catch (IllegalArgumentException
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetExceptio
e.printStackTrace();
}
return paths;
}
}
在android2.3中,判断内置SD卡是否挂载:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
//为true的话,内置sd卡存在
}
判断外置SD卡是否挂载:
if(Environment.getStorageState(Environment.STORAGE_PATH_SD2).equals(Environment.MEDIA_MOUNTED))
{
//为true的话,外置sd卡存在
}
顺带描述怎么取得sdcard的空间大小,
File sdcardDir = Environment.getExternalStorageDirect
StatFs sf = new StatFs(sdcardDir.getPath()); //sdcardDir.getPath())值为/mnt/sdcard,想取外置sd卡大小的话,直接代入/mnt/sdcard2
long blockSize = sf.getBlockSize(); //总大小
long blockCount = sf.getBlockCount();
long availCount = sf.getAvailableBlocks(); //有效大小
获取外置内存卡的地址
//获取外置存储卡的根路径,如果没有外置存储卡,则返回nullpublic static String getPath2() { String sdcard_path = null; String sd_default = Environment.getExternalStorageDirectory() .getAbsolutePath(); if (sd_default.endsWith("/")) { sd_default = sd_default.substring(0, sd_default.length() - 1); } // 得到路径 try { Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec("mount"); InputStream is = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(is); String line; BufferedReader br = new BufferedReader(isr); while ((line = br.readLine()) != null) { if (line.contains("secure")) continue; if (line.contains("asec")) continue; if (line.contains("fat") && line.contains("/mnt/")) { String columns[] = line.split(" "); if (columns != null && columns.length > 1) { if (sd_default.trim().equals(columns[1].trim())) { continue; } sdcard_path = columns[1]; } } else if (line.contains("fuse") && line.contains("/mnt/")) { String columns[] = line.split(" "); if (columns != null && columns.length > 1) { if (sd_default.trim().equals(columns[1].trim())) { continue; } sdcard_path = columns[1]; } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return sdcard_path;}
- Android 获取内外置存储卡方法
- Android 获取内外置存储卡方法
- Android 获取内外置存储卡方法
- Android 获取内外置存储卡方法
- Android 获取内外置存储卡方法
- Android 获取内外置存储路径
- 获取android系统外置存储卡路径的方法
- Android获取系统外置存储卡路径的方法
- Android获取系统外置存储卡路径的方法
- Android获取系统外置存储卡路径的方法
- Android 准确获取外置存储卡路径的方法
- Android获得内/外置存储卡路径
- android 获取外置卡的方法
- android 获取内置存储卡和外置存储卡
- Android获取外置存储卡、内置存储卡路径
- android两行代码获取内外置sd卡路径
- Android获取外置卡和内置卡信息的方法
- Android手机外置SD卡(TF卡)的获取方法
- FPGA第八篇:运算符、赋值语句和结构说明语句
- 静态代理
- 最近使用ut的一些体会
- 图像去模糊(逆滤波)
- SPOJ 694 Distinct Substrings(后缀数组)
- Android 获取内外置存储卡方法
- 基于webmagic的爬虫小应用--爬取知乎用户信息
- Android App 内存泄露之Handler
- 理学与心学的比较
- Dropping Balls, UVa679
- 怎样快速学会ZBrush 中的移动笔刷的运用
- 十六、适配器模式Adapter(结构型模式)
- drools的学习
- Windows下编译tc服务端