我正在查询MediaStore
以提取图像,并且有_ID
和DATA
列。
DATA
列表示路径,我使用两种不同的方法来获取Uri,但是在不同情况下都失败了:
import android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI
fun getUriFromId(mediaStoreId: Long): Uri =
Uri.withAppendedPath(EXTERNAL_CONTENT_URI, mediaStoreId.toString())
fun getUriFromPath(context: Context, path: String): Uri =
FileProvider.getUriForFile(context.applicationContext, AUTHORITY, File(path))
这些是我的路径:
<paths>
<external-path name="Storage" path="." />
<root-path name="external_files" path="/storage/" />
</paths>
AUTHORITY
是我自己的。它工作正常,但最近发生了崩溃:
致命异常:java.lang.IllegalArgumentException
找不到 配置的根目录,其中包含/system/media/Pre-loaded/Pictures/Picture_01_Greenery.jpg
com.curator.android.storage.util.AndroidMediaUtil $ Companion.android.support.v4.content.FileProvider.getUriForFile
获取uriFromId不可靠,不能在大多数设备上使用,但不能在所有设备上使用。这是更快,更有效的思考。