Android FileProvider.GetUriForFile正在切断URI的开头



我正在尝试更新获取数据库文件的代码。我正在尝试改用文件提供程序。

我有点卡住了,因为原始文件路径"/storage/emulated/0/Android/data/com.abc/files/abcMobile.db3”

我需要获取FileProvider.GetUriForFile返回的 URI,以在其开头包含"/storage/emulated/0/"。

这是我的代码:

Log.Info ("directory", GetDirectory (dir).ToString());
                Log.Info ("filename", filename);
                File newFile = new File (GetDirectory (dir).AbsolutePath, "/" + filename);
                Android.Net.Uri androidContentUri = FileProvider.GetUriForFile (Application.Context, Application.Context.PackageName + ".fileprovider", newFile);
                System.Uri systemContentUri = SystemUri (androidContentUri);
                return systemContentUri;

在上面的代码中,我创建了一个路径为 "/storage/emulated/0/Android/data/com.abc/files/abcMobile.db3” 的文件,但是当我将文件传递给 FileProvider.GetUriForFile() 它似乎创建了一个 {content://com.abc.fileprovider/./Android/data/com.abc/files/abcMobile.db3} 的 Android.Net.URI,我将其投射到一个变得{content://com.abc.fileprovider/Android/data/com.abc/files/abcMobile.db3} System.Net.URI

我只需要弄清楚为什么它会从Android.Net.Uri的开头删除"/storage/emulated/0/“并阻止它发生,然后它应该可以工作。有什么想法吗?

我只需要弄清楚为什么它从Android.Net.Uri的开头删除"/storage/emulated/0/"并阻止这种情况发生,然后它应该可以工作。有什么想法吗?

因为您正在为文件生成内容 uri,从而授予访问此文件的临时权限。返回文件的完整路径不被认为是一种安全的方式。

如果您正在参考FileProvider的"为文件生成内容URI"部分。你会发现以下句子:

若要使用内容 URI 与其他应用共享文件,你的应用必须生成内容 URI。

作为上一个代码段的结果,getUriForFile(( 返回内容 URI content://com.mydomain.fileprovider/my_images/default_image.jpg。

因此,它是 FileProvider 返回的 ContentUri 的预期形式。

最新更新