安卓系统格式化SD卡

这篇博客介绍了如何在安卓系统上格式化SD卡,包括VFAT和NTFS两种格式的详细步骤。首先,获取VolumeInfo,然后使用StorageManager的format方法进行格式化。讨论了SD卡在LINUX系统下的支持格式,并阐述了SD卡的不同状态。

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

格式化一张SD卡,流程分两步

  • 获取该SD卡插入后生成的VolumeInfo
  • 调用StorageManager的format方法

安卓系统是基于LINUX系统的,LINUX系统支持ext格式和vfat格式(vfat就是fat格式一家,从fat16到exfat都有)。

关于挂载,一张SD卡的状态有很多种,这里给出VolumeInfo定义的状态(它其实是Vold中定义的):

    //插上了,可以挂载,但还没挂载上
    public static final int STATE_UNMOUNTED = IVold.VOLUME_STATE_UNMOUNTED;
    //正在检查。检查完之后会告诉我们是否可挂载
    public static final int STATE_CHECKING = IVold.VOLUME_STATE_CHECKING;
    //已挂载
    public static final int STATE_MOUNTED = IVold.VOLUME_STATE_MOUNTED;
    //已挂载,但设备只读
    public static final int STATE_MOUNTED_READ_ONLY = IVold.VOLUME_STATE_MOUNTED_READ_ONLY;
    //正在格式化。设备格式化完成后,会变为UNMOUNTED状态。这时候需要去再挂载一下
    public static final int STATE_FORMATTING = IVold.VOLUME_STATE_FORMATTING;
    //正在拔出。
    public static final int STATE_EJECTING = IVold.VOLUME_STATE_EJECTING;
    //插上了,但设备无法挂载。一般是因为文件系统不支持的
    public static final int STATE_UNMOUNTABLE = IVold.VOLUME_STATE_UNMOUNTABLE;
    //已拔出
    public static final int STATE_REMOVED = IVold.VOLUME_STATE_REMOVED;
    //没拔好,文件有损坏
    public static final int STATE_BAD_REMOVAL = IVold.VOLUME_STATE_BAD_REMOVAL;

格式化SD卡(VFAT格式)

	final StorageManager storageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
	for(VolumeInfo volume : storageManager.getVolumes() {
		try {
			if(volume.type == VolumeInfo.TYPE_PUBLIC) {
				storageManager.format(volumeInfo.id);
            	storageManager.mount(volumeInfo.id);
			}
		} catch (Exception exception) {
			//TODO
		}
	}

格式化SD卡(NTFS格式)

首先判断SD卡是何种类型的(内置,外置或未知)

	public enum StorageType {
        INTERNAL,       // An internal Volume, e.g. EMMC
        EXTERNAL_CARD,  // An external card such as SD card or memory stick
        UNKNOWN         // unknown device
    }
    
	private static StorageType getVolumeType(VolumeInfo volume) {
        int volumeType = volume.getType();

        if (volumeType == VolumeInfo.TYPE_EMULATED) {
            return StorageType.INTERNAL;
        }

        if (volumeType == VolumeInfo.TYPE_PUBLIC) {
            DiskInfo disk = volume.getDisk();
            int diskFlags = (disk != null) ? disk.flags : 0;

            if ((diskFlags & DiskInfo.FLAG_SD) != 0) {
                return StorageType.EXTERNAL_CARD;
            }
        }
        return StorageType.UNKNOWN;
    }
	for (VolumeInfo volumeInfo : storageManager.getVolumes()) {
		//这里NTFS的SD卡未挂载,类型算是未知
    	if (getVolumeType(volumeInfo) == StorageType.UNKNOWN) {
        	try {
             	storageManager.format(volumeInfo.id);
             	storageManager.mount(volumeInfo.id);
         	} catch (Exception exception) {
            	//TODO
        	}
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值