返回
SD卡格式化后容量异常问题剖析
Android
2023-09-24 13:19:41
## 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 系统中,这一问题已得到修复。