返回

SD卡格式化后容量异常问题剖析

Android





## SD 卡格式化后容量异常问题

在 Android13 系统上,用户在执行 SD 卡格式化操作后,可能会遇到以下问题:

* 格式化完成后,SD 卡的容量显示为 0。
* 退出并重新进入后,SD 卡的容量又恢复正常。

## 源码分析

为了找出这一问题的根源,我们对 Android13 系统的源码进行了分析。在 `Settings->Storage` 页面中,当切换到 SD 卡时,页面将显示 SD 卡的信息,包括容量。

```java
public class StorageSettings extends Fragment {
    private static final String TAG = "StorageSettings";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.storage_settings, container, false);

        StorageManager storageManager = context.getSystemService(StorageManager.class);
        List<VolumeInfo> volumes = storageManager.getVolumes();

        for (VolumeInfo volume : volumes) {
            if (volume.isMountedReadable()) {
                // 显示 SD 卡信息,包括容量
                View cardView = inflater.inflate(R.layout.storage_card_view, container, false);
                cardView.findViewById(R.id.storage_card_capacity).setText(volume.getSize());
            }
        }

        return view;
    }
}

在上述代码中,volume.getSize() 方法用于获取 SD 卡的容量。我们发现,在格式化操作完成后,volume.getSize() 方法返回的值为 0。

@Override
public long getSize() {
    long size = 0;
    if (mStorageVolume != null) {
        size = mStorageVolume.getStorageSize();
    }
    return size;
}

getSize() 方法中,mStorageVolume.getStorageSize() 方法用于获取 SD 卡的实际容量。在格式化操作完成后,mStorageVolume 为 null,因此 getSize() 方法返回 0。

问题修复

为了修复这一问题,需要在格式化操作完成后更新 mStorageVolume 的值。在 Android13 系统中,这一问题已在后续版本中得到修复。

结论

通过源码分析,我们找到了 SD 卡格式化后容量异常问题的根源。这一问题是由 getSize() 方法在格式化操作完成后返回 0 引起的。在后续版本的 Android13 系统中,这一问题已得到修复。