当前位置: 移动技术网 > IT编程>移动开发>Android > Android获取内外置存储卡的方法

Android获取内外置存储卡的方法

2019年07月24日  | 移动技术网IT编程  | 我要评论

孙静雅 ed2k,2500元电脑配置,曼联妖王女友晒美照 不惧走光

以前的android(4.1之前的版本)中,sdcard跟路径通过“/sdcard”或者“/mnt/sdcard”来表示存储卡,而在jelly bean系统中修改为了“/storage/sdcard0”,以后可能还会有多个sdcard的情况。

目前为了保持和之前代码的兼容,sdcard路径做了link映射。

为了使您的代码更加健壮并且能够兼容以后的android版本和新的设备,请通过environment.getexternalstoragedirectory().getpath()来获取sdcard路径,如果您需要往sdcard中保存特定类型的内容,可以考虑使用environment.getexternalstoragepublicdirectory(string type)函数,该函数可以返回特定类型的目录,目前支持如下类型:

directory_alarms //警报的铃声
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(),实现获取存储器列表。

package ckl.storage.list;

import java.lang.reflect.invocationtargetexception;
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) {
e.printstacktrace();
} catch (illegalaccessexception e) {
e.printstacktrace();
} catch (invocationtargetexception e) {
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.getexternalstoragedirectory();
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(); //有效大小

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网