通过 MediaStore 访问 USB OTG 设备(SD 卡读卡器)上的文件

问题描述 投票:0回答:1

我可以通过 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
                    }
                }
            }
        }
    }
}
android mediastore storage-access-framework usb-otg
1个回答
0
投票

SAF 的性能很糟糕 val 文件 = documentFile.listFiles()

是的,如果您使用 DocumentFile,它的速度大约是经典 File 类的二十倍。

最好使用 DocumentsContract,因为它的速度大致相同。

© www.soinside.com 2019 - 2024. All rights reserved.