如何使用内容URI检查文件是否存在

3
我有一个音频文件的内容URI,它是我从选择器意图中获取的。
content://com.mi.android.globalFileexplorer.myprovider/external_files/KannadaGeeta/11CHAPTER10.mp3

我刚刚把上面的uri保存到数据库中。

现在,当用户再次打开我的应用程序时,我需要告知他最后选择的mp3文件是否存在。如果存在,我必须允许他继续,否则我需要通知重新下载该文件。

但我完全卡在这里了,我不知道如何使用其内容uri检查文件是否存在。

请帮助我解决这个问题。

2个回答

2

方法1: 由于安全原因,Android团队决定弃用getExternalStorageDirectory,但他们没有很好地解决很多问题。

对于这个问题,我没有找到任何合适的答案。无论如何,下面是一种使用已弃用方法的解决方法。

        var uri = Uri.parse("content://com.mi.android.globalFileexplorer.myprovider/external_files/KannadaGeeta/11CHAPTER10.mp3")
        var vidPath = uri.path
        vidPath = vidPath?.replace("external_files",Environment.getExternalStorageDirectory().toString())
        val file = File(vidPath)

        if (file.exists()) {
            println("log yes $file")
        } else {
            println("log no $file")
        }

这个可以正常工作,但由于方法已被弃用,使用它取决于您自己的选择。
方法2:另一种方法是使用ACTION_OPEN_DOCUMENT,然后在onActivityResult中添加。
val contentResolver = applicationContext.contentResolver
val takeFlags: Int = Intent.FLAG_GRANT_READ_URI_PERMISSION or       
                     Intent.FLAG_GRANT_WRITE_URI_PERMISSION
contentResolver.takePersistableUriPermission(selectedVideoUri!!, takeFlags)

然后,最终使用未过期的“内容URI”,可以检查文件是否存在。
DocumentFile.fromSingleUri(Uri.parse(contentUriStringfromdatabase)).exists()

-5
 File file = new File(URI.create("your uri").getPath());
 if (file.exists()) {
  //Do something`enter code here`
 }

还有你需要获得许可:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这不会起作用,因为当我打印file时,我会得到/external_files/KannadaGeeta/11CHAPTER10.mp3,它总是返回false。 - Vikas Acharya
尝试将“content:”替换为“file:”。 - Ilja Tomilovych
我没听懂你在说什么,请举个例子。 - Vikas Acharya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接