Java 检查android手机存储器中是否存在已知的文档Uri

Java 检查android手机存储器中是否存在已知的文档Uri,java,android,Java,Android,我正在从服务器获取一个文档Uri,该Uri指出在上传时文档(pdf或word)最初存储在手机存储器中的位置。在我的应用程序中,我想在下载文档之前检查该文档是否仍然存在于用户的手机存储中(通过检查此uri是否仍然有效)。我怎么能做到这一点?我尝试了多种方法都没有成功。请帮忙。 这是我已经尝试过的 Uri uri = Uri.parse("content://com.android.providers.downloads.documments/document/748");

我正在从服务器获取一个文档Uri,该Uri指出在上传时文档(pdf或word)最初存储在手机存储器中的位置。在我的应用程序中,我想在下载文档之前检查该文档是否仍然存在于用户的手机存储中(通过检查此uri是否仍然有效)。我怎么能做到这一点?我尝试了多种方法都没有成功。请帮忙。 这是我已经尝试过的

 Uri uri = Uri.parse("content://com.android.providers.downloads.documments/document/748");
            final File f = new File(uri.getPath());
           if (f.exists()){
                Log.d("File existence", "Yes, file exists");
            }else {
                Log.d("File does not exist", "so sorry");
            }
我还尝试使用ContentResolver实现此功能,如中所述,但该方法引发了一个安全异常:查询游标需要“管理文档”权限,当添加到清单时,该权限也会带来一个错误,即该权限仅由系统应用程序使用。 请帮忙。我正在安卓6.0.1中运行该应用程序 提前感谢

试试这个:

getContext().getContentResolver().getPersistedUriPermissions().forEach( {element -> element.uri == yourUri});

谢谢你。如何在Kitkat上实现这一点,因为forEach调用需要API24及以上版本。我的min是19(KitKat)看看这个:这对你有帮助吗?不是真的:(.你能展示一下这个的完整实现吗?试着打开uri的输入流。
getContext().getContentResolver().openInputStream(uri)
。当然,您不能将File类用于内容方案uri。但我的建议只有在您仍然具有读取权限的情况下才有效。而且您没有告诉我在上载时是否具有持久权限。