Android FileProvider.GetUriForFile 正在切断 URI 的开头
Android FileProvider.GetUriForFile is cutting off the start of the URI
我正在尝试更新获取数据库文件的代码。我正在尝试改用 FileProvider。
有点卡因为原文件路径是"/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()
时,它似乎创建了一个 Android.Net.URI 的 [=17] =] 然后我将它转换为 System.Net.URI
,变成 {content://com.abc.fileprovider/Android/data/com.abc/files/abcMobile.db3}
。
我只需要弄清楚为什么它会从 Android.Net.Uri
的开头删除 "/storage/emulated/0/“
并阻止它发生,然后它就应该可以工作了。有什么想法吗?
I just need to figure out why it deletes "/storage/emulated/0/“ from the start of the Android.Net.Uri and stop that from happening and then it should work. Any ideas?
因为您正在为您的文件生成内容 uri,它授予访问该文件的临时权限。 Return文件的完整路径不被认为是一种安全的方式。
如果您参考 FileProvider 的“为文件生成内容 URI”部分。你会发现下面这句话:
To share a file with another app using a content URI, your app has to generate the content URI.
...
As a result of the previous snippet, getUriForFile() returns the content URI content://com.mydomain.fileprovider/my_images/default_image.jpg.
因此,这是 FileProvider
返回的 ContentUri 的预期形式。
我正在尝试更新获取数据库文件的代码。我正在尝试改用 FileProvider。
有点卡因为原文件路径是"/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()
时,它似乎创建了一个 Android.Net.URI 的 [=17] =] 然后我将它转换为 System.Net.URI
,变成 {content://com.abc.fileprovider/Android/data/com.abc/files/abcMobile.db3}
。
我只需要弄清楚为什么它会从 Android.Net.Uri
的开头删除 "/storage/emulated/0/“
并阻止它发生,然后它就应该可以工作了。有什么想法吗?
I just need to figure out why it deletes "/storage/emulated/0/“ from the start of the Android.Net.Uri and stop that from happening and then it should work. Any ideas?
因为您正在为您的文件生成内容 uri,它授予访问该文件的临时权限。 Return文件的完整路径不被认为是一种安全的方式。
如果您参考 FileProvider 的“为文件生成内容 URI”部分。你会发现下面这句话:
To share a file with another app using a content URI, your app has to generate the content URI.
...
As a result of the previous snippet, getUriForFile() returns the content URI content://com.mydomain.fileprovider/my_images/default_image.jpg.
因此,这是 FileProvider
返回的 ContentUri 的预期形式。