【发布时间】:2020-11-28 12:46:15
【问题描述】:
在 Android 应用程序 (API 29) 中,我正在编写一个需要通过 USB 从笔记本电脑读取的文件。它被写入模拟的外部存储。正如预期的那样,在物理设备上的 Android 文件管理器中,我在以下位置看到该文件:
Internal Storage > Android > data > com.xxx.myapp > files > Directory Documents >
Exports > Databases > my file.dbf
但是,在连接 USB 的笔记本电脑上,我使用 Android 文件传输(甚至 Android Studio 的设备文件资源管理器)看不到该文件。我确实在以下位置看到了私人文件:
Internal Storage > Android > data > data > com.xxx.myapp > files > ...
应用设置开启存储权限,开发者设置开启USB调试。
虽然这显然不是必需的,但我也启用了清单设置 ReadExternalStorage 和 WriteExternalStorage。
我必须怎么做才能使文件对笔记本电脑可见?
我的代码如下(在 Xamarin Android 依赖服务中)。
public async Task WriteExternalFileFromStreamAsync ( string foldername, string subfoldername, string filename, Stream stream )
// Writes external file from given stream
{
await Task.Run ( () =>
{
try
{
// Create folder
Context currentContext = Android.App.Application.Context;
Java.IO.File directory = new Java.IO.File ( currentContext.GetExternalFilesDir( "directorydocuments" ).AbsolutePath + "/" + foldername );
directory.Mkdir ();
// Create subfolder
Java.IO.File subdirectory = new Java.IO.File ( currentContext.GetExternalFilesDir( "directorydocuments" ).AbsolutePath + "/" + foldername + "/" + subfoldername );
subdirectory.Mkdir ();
// Write file
string path = Path.Combine ( subdirectory.AbsolutePath, filename );
using ( FileStream filestream = new FileStream ( path, FileMode.Create, FileAccess.ReadWrite ) )
stream.CopyTo ( filestream );
}
catch ( Exception ex )
{
MyUtil.WriteLogFile ( S.Exception, ex.AsStringVal () );
throw;
}
});
}
【问题讨论】:
-
GetExternalFilesDir(null) 同理,说明与文件夹和子文件夹的文件访问权限无关。
标签: xamarin.forms xamarin.android android-external-storage