访问 /storage需要哪些权限?
我已经申请成为一个 外部存储管理器,并为 true 获得
Environment.isExternalStorageManager()
然而,当尝试读取 /storage(例如 Environment.getStorageDirectory())时,我什么也读不到,而 File("/storage").canRead() 返回 false。
这是为什么?我需要请求哪种权限来读取 /storage?
解决方案
对于原始问题,即读取 /storage 本身,我没有找到解决办法。不过,我发现SD卡是在 /storage 下按其卷标标识挂载的。并且可以访问 /storage/<volume-id> 的内容。仍然存在确定SD卡的卷标标识的问题。
StorageManagers storageVolumes 方法会列出所有卷标,卷标标识可以从那里获得:
fun removableStorage(context: Context): List<FileItem> {
val result = mutableListOf<FileItem>()
val storageManager = context.getSystemService(STORAGE_SERVICE) as StorageManager
for (volume in storageManager.storageVolumes.drop(1)) {
result.add(
FileItem(
volume.getDescription(context),
Icons.Default.SdCard,
File(Environment.getStorageDirectory().path + "/" + volume.mediaStoreVolumeName?.uppercase())
)
)
}
return result
}
StorageVolume.mediaStoreVolumeName() 包含所需的卷标标识,但不幸的是是小写字母。要定位到SD卡,需要把它们转换成大写。所有这一切似乎被刻意设计得尽可能不友好。
前面提到的 storageVolumes 的第一项指的是内部存储。这个信息没有用,因此被省略。
StorageVolume.getDescription() 包含要呈现给用户的卷标。这就是用户在将SD卡挂载到电脑上时看到的标签。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。