我可以通过 MediaStore 访问连接到 Android 设备的 USB OTG 设备(SD 读卡器)上的图像吗?
我可以使用此代码使用
Storage Access Framework
访问文件。我试图根据上次修改日期和文件大小在外部 USB 设备上查找特定图像。然而,SAF 的性能很糟糕,我认为 MediaStores 查询选项可能会性能更高。
我尝试使用 MediaStore (
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
),但它似乎只能在 Android 设备上查找文件。
我正在为 Android 12+ 构建
fun startIntent() {
val storageManager = context.getSystemService(Context.STORAGE_SERVICE) as StorageManager
storageManager.storageVolumes.map {
if(it.isRemovable) {
val intent = it.createOpenDocumentTreeIntent()
currentActivity?.startActivityForResult(intent, USB_STORAGE_ACCESS_CODE)
}
}
}
override fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?) {
scope.launch {
val treeUri = data?.data
treeUri?.let { uri ->
val documentFile = DocumentFile.fromTreeUri(activity, uri)
val files = documentFile.listFiles()
files.forEach { file ->
this.filesToMatch?.forEach { fileToMatch ->
if (
file.length() == fileToMatch.length() &&
file.lastModified() == fileToMatch.lastModified()
) {
// perform some operation
}
}
}
}
}
}
SAF 的性能很糟糕 val 文件 = documentFile.listFiles()
是的,如果您使用 DocumentFile,它的速度大约是经典 File 类的二十倍。
最好使用 DocumentsContract,因为它的速度大致相同。