c语言查询sd卡mount位置,查找可移动SD卡的位置

这段代码展示了如何在Android中检查外部存储(如SD卡)的可用性和写入性,并获取所有可用的存储位置。通过读取`/proc/mounts`和`/system/etc/vold.fstab`文件来获取挂载点信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我根据这里找到的一些答案提出了以下解决方案。

代码:public class ExternalStorage {

public static final String SD_CARD = "sdCard";

public static final String EXTERNAL_SD_CARD = "externalSdCard";

/**

* @return True if the external storage is available. False otherwise.

*/

public static boolean isAvailable() {

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

return true;

}

return false;

}

public static String getSdCardPath() {

return Environment.getExternalStorageDirectory().getPath() + "/";

}

/**

* @return True if the external storage is writable. False otherwise.

*/

public static boolean isWritable() {

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {

return true;

}

return false;

}

/**

* @return A map of all storage locations available

*/

public static Map getAllStorageLocations() {

Map map = new HashMap(10);

List mMounts = new ArrayList(10);

List mVold = new ArrayList(10);

mMounts.add("/mnt/sdcard");

mVold.add("/mnt/sdcard");

try {

File mountFile = new File("/proc/mounts");

if(mountFile.exists()){

Scanner scanner = new Scanner(mountFile);

while (scanner.hasNext()) {

String line = scanner.nextLine();

if (line.startsWith("/dev/block/vold/")) {

String[] lineElements = line.split(" ");

String element = lineElements[1];

// don't add the default mount path

// it's already in the list.

if (!element.equals("/mnt/sdcard"))

mMounts.add(element);

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

try {

File voldFile = new File("/system/etc/vold.fstab");

if(voldFile.exists()){

Scanner scanner = new Scanner(voldFile);

while (scanner.hasNext()) {

String line = scanner.nextLine();

if (line.startsWith("dev_mount")) {

String[] lineElements = line.split(" ");

String element = lineElements[2];

if (element.contains(":"))

element = element.substring(0, element.indexOf(":"));

if (!element.equals("/mnt/sdcard"))

mVold.add(element);

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

for (int i = 0; i 

String mount = mMounts.get(i);

if (!mVold.contains(mount))

mMounts.remove(i--);

}

mVold.clear();

List mountHash = new ArrayList(10);

for(String mount : mMounts){

File root = new File(mount);

if (root.exists() && root.isDirectory() && root.canWrite()) {

File[] list = root.listFiles();

String hash = "[";

if(list!=null){

for(File f : list){

hash += f.getName().hashCode()+":"+f.length()+", ";

}

}

hash += "]";

if(!mountHash.contains(hash)){

String key = SD_CARD + "_" + map.size();

if (map.size() == 0) {

key = SD_CARD;

} else if (map.size() == 1) {

key = EXTERNAL_SD_CARD;

}

mountHash.add(hash);

map.put(key, root);

}

}

}

mMounts.clear();

if(map.isEmpty()){

map.put(SD_CARD, Environment.getExternalStorageDirectory());

}

return map;

}}

用法:Map externalLocations = ExternalStorage.getAllStorageLocations();

File sdCard = externalLocations.get(ExternalStorage.SD_CARD);File externalSdCard = externalLocations.get(ExternalStorage.EXTERNAL_SD_CARD);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值