MediaStore:将Uri转换为文件的正确方法

时间:2018-08-04 06:44:55

标签: android kotlin uri mediastore android-fileprovider

我正在查询MediaStore以提取图像,并且有_IDDATA列。

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不可靠,不能在大多数设备上使用,但不能在所有设备上使用。这是更快,更有效的思考。

0 个答案:

没有答案