我正试图从存储中的文件在外部层中播放视频。
首先,我获取特定文件的uri,并将其存储在一个字符串变量中。
private var myURI: String? = null
private var getURI = registerForActivityResult(
ActivityResultContracts
.GetContent()
) { uri ->
if (uri == null) {
Toast.makeText(
requireActivity(), "Please pick a video",
Toast.LENGTH_SHORT
).show()
} else {
Log.d(ContentValues.TAG, "URI is $uri")
//Store URI
myURI = uri.toString()
}
}
此外,我将URI存储到设备上的本地SQLite数据库中。
我在本地数据库中已经有了它的URI,所以我不想再次使用registerForActivityResult方法,也不想通过Intent选择视频。这就是uri在数据库中以字符串格式显示的方式。
"content://com.android.providers.media.documents/document/video%3A51407">
这是从数据库访问uri的代码
val uri = URI("content://com.android.providers.media.documents/document/video%3A51407")
val videoUri = uri.toString()
我试图找到一种方法来做到这一点,但找不到实现这一点的方法。
我将URI存储到设备上的本地SQLite数据库
这不会像写的那样工作。您需要从ActivityResultContracts.GetContent
切换到ActivityResultContracts.OpenDocument
。一旦获得Uri
,您还需要在ContentResolver
上调用takePersistableUriPermissions()
。否则,一旦您的流程终止,您对该内容的权利就会失效。