是否有可能重用内容模式URI



当从文件资源管理器打开文件时,我得到如下内容方案URI:

content://com.asus.filemanager.OpenFileProvider/file/sdcard/backups/apps/testfile.apk

然后使用内容解析器对文件进行临时复制,如下所示:

File tempFile = getFileFromContentUri(getContext(), mUri, null);

应用程序处理tempFile后,该文件被删除。现在的问题是,我想把mUri转发到另一个活动与以下代码,但我得到一个安全异常,而这样做,所以似乎URI只能使用一次,这是正确的吗?:

        private forwardFile(Uri fileUri) {
            final Intent installIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
            Uri uri;
            if (ContentResolver.SCHEME_CONTENT.equals(fileUri.getScheme())) {
                uri = new Uri.Builder()
                        .path(fileUri.getPath())
                        .authority(fileUri.getAuthority())
                        .scheme(ContentResolver.SCHEME_CONTENT)
                        .build();
            }
            installIntent.setData(uri);
            installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);
            context.startActivity(installIntent);
       }

是否有可能重用uri或您可以看到的变通方法?我没有看到我可以处理这个问题的方法,例如,我必须删除临时文件,但是如果我转发复制的文件而不是原始的URI,我不会得到回调,所以我不知道什么时候删除复制的文件。

这里是我得到的例外:

java.lang.SecurityException: Uid 10165 does not have permission to uri 0 @ content://com.asus.filemanager.OpenFileProvider/file/sdcard/backups/apps/testfile.apk

只有当服务的应用程序定义了一个持久的权限和客户端调用context.getContentResolver(). takepersistableuripermission()这可能工作,但我也不确定

您已获得以下许可:

content://com.asus.filemanager.OpenFileProvider/file/sdcard/backups/apps/testfile.apk

难怪你得到一个java.lang.SecurityException:使用一个完全不同的(和不存在的)文件:

content://com.asus.filemanager.OpenFileProvider/file/sdcard/Download/testfile.apk

最新更新