如何获取 Uno 平台中包含资产的 uri?
How to get uri to included asset in Uno Platform?
为了与 android 绑定项目集成,我需要提供一个指向 .zip 文件的 Uri,我已将其包含在资产中并指定为 AndroidAsset。如何获取此类文件的 Uri?
我已经尝试过 ms-appx:///Assets/file.zip
和 file:///Assets/file.zip
更新:
需要注意的是,使用 Uri 的函数是 Android 本机代码,所以我怀疑 ms-appx:// 没有得到正确解析。
更新2:
无法提供流。
我调用的方法显示在此处的示例中:https://github.com/Laerdal/Xamarin.Nordic.DFU.Android/blob/7244627c09e97e05ee2c8e05744f19055981486b/Sample/Nordic/FirmwareUpdater.cs#L27.
_dfuServiceInitiator.SetZip(firmwareZipFile);
public DfuServiceInitiator setZip(@NonNull final Uri uri) {
return init(uri, null, 0, DfuBaseService.TYPE_AUTO, DfuBaseService.MIME_TYPE_ZIP);
}
方法 StorageFile.GetFileFromApplicationUriAsync
可用于从 ms-appx Uri 获取 StorageFile
对象。
然后可以使用StoragFile
的Path
属性获取本地的android路径。请注意将文件的构建操作设置为 Content
.
var file = await StorageFile.GetFileFromApplicationUriAsync(new System.Uri("ms-appx:///Assets/file.zip"));
Android.Net.Uri zipUri = Android.Net.Uri.Parse("file:///"+file.Path);
从 StorageFile.GetFileFromApplicationUriAsync()
方法读取的文件可能不是 return UWP 上的稳定路径,尤其是在 Android 或 WebAssembly 上,文件不是必须在文件系统上。
在 Android 上,该文件是 Stream
直接从 APK 文件构建的,在 WebAssembly 上它存储在一个临时位置。
为了保持文件的稳定副本,请使用以下内容:
var file = await StorageFile.GetFileFromApplicationUriAsync(new System.Uri("ms-appx:///TextFile.txt"));
var newFile = await file.CopyAsync(Windows.Storage.ApplicationData.Current.LocalFolder, file.Name, NameCollisionOption.ReplaceExisting);
var txt = await FileIO.ReadTextAsync(newFile);
为了与 android 绑定项目集成,我需要提供一个指向 .zip 文件的 Uri,我已将其包含在资产中并指定为 AndroidAsset。如何获取此类文件的 Uri?
我已经尝试过 ms-appx:///Assets/file.zip
和 file:///Assets/file.zip
更新: 需要注意的是,使用 Uri 的函数是 Android 本机代码,所以我怀疑 ms-appx:// 没有得到正确解析。
更新2: 无法提供流。 我调用的方法显示在此处的示例中:https://github.com/Laerdal/Xamarin.Nordic.DFU.Android/blob/7244627c09e97e05ee2c8e05744f19055981486b/Sample/Nordic/FirmwareUpdater.cs#L27.
_dfuServiceInitiator.SetZip(firmwareZipFile);
public DfuServiceInitiator setZip(@NonNull final Uri uri) {
return init(uri, null, 0, DfuBaseService.TYPE_AUTO, DfuBaseService.MIME_TYPE_ZIP);
}
方法 StorageFile.GetFileFromApplicationUriAsync
可用于从 ms-appx Uri 获取 StorageFile
对象。
然后可以使用StoragFile
的Path
属性获取本地的android路径。请注意将文件的构建操作设置为 Content
.
var file = await StorageFile.GetFileFromApplicationUriAsync(new System.Uri("ms-appx:///Assets/file.zip"));
Android.Net.Uri zipUri = Android.Net.Uri.Parse("file:///"+file.Path);
从 StorageFile.GetFileFromApplicationUriAsync()
方法读取的文件可能不是 return UWP 上的稳定路径,尤其是在 Android 或 WebAssembly 上,文件不是必须在文件系统上。
在 Android 上,该文件是 Stream
直接从 APK 文件构建的,在 WebAssembly 上它存储在一个临时位置。
为了保持文件的稳定副本,请使用以下内容:
var file = await StorageFile.GetFileFromApplicationUriAsync(new System.Uri("ms-appx:///TextFile.txt"));
var newFile = await file.CopyAsync(Windows.Storage.ApplicationData.Current.LocalFolder, file.Name, NameCollisionOption.ReplaceExisting);
var txt = await FileIO.ReadTextAsync(newFile);