【发布时间】:2021-09-20 17:03:49
【问题描述】:
我对 Hololens 2 的软件开发相对较新,并且遇到了一个相当大的问题,我已经搞砸了很长时间,而且我的想法正在慢慢枯竭。
我的项目看起来像这样。我编写了一个 Unity 应用程序来捕获数据并将其存储在数据库 (sqlite) 中。 Xamarin.Forms UWP 应用程序应该从数据库中获取数据并使用它来绘制图表以实现更好的可视化。最大的问题是,两个应用程序都需要能够访问 Hololens 2 上的同一个数据库。我认为我可以是 U 盘上的数据库,两个应用程序都可以访问 U 盘。在 Xamarin 应用程序和 Unity 应用程序中启用了“可移动存储”。在 Xamarin 应用程序中,我在 Appmanifest 声明下使文件扩展名已知。我正在尝试使用以下命令建立连接:
namespace ARScoliosis.XamarinApp.UWP.Services
{
public class DatabasePath : IDatabasePath
{
public async Task<string> GetLocalFilePath()
{
var messageDialog = new MessageDialog("No Usb connection has been found.");
StorageFolder externalDevices = KnownFolders.RemovableDevices;
if(externalDevices == null)
{
messageDialog.Commands.Add(new UICommand("No Devices", null));
}
StorageFolder usbStick = (await externalDevices.GetFoldersAsync()).FirstOrDefault(); <---According to debugging it stops here and jumps to optionsBuilder.UseSqlite($"Filename={databasePath}");
if (usbStick == null)
{
messageDialog.Commands.Add(new UICommand("No UsbStick", null));
}
var usbStickFolder = await usbStick.CreateFolderAsync("DB", CreationCollisionOption.OpenIfExists);
if (usbStickFolder == null)
{
messageDialog.Commands.Add(new UICommand("No Folder", null));
}
var file = await usbStickFolder.CreateFileAsync("Database.db", CreationCollisionOption.OpenIfExists);
if(file == null)
{
messageDialog.Commands.Add(new UICommand("No File", null));
}
//var success = await Launcher.LaunchFileAsync(file);
return file.ToString();
}
我的 dbcontext 文件如下所示:
namespace XamarinApp.Authentication
{
public partial class DBContext : DbContext
{
public DBContext()
{
this.Database.EnsureCreated(); <--- Microsoft.Data.Sqlite.SqliteException: "SQLite Error 14: 'unable to open database file'."
this.Database.Migrate();
}
public virtual DbSet<ItemData> ItemDatas { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
var databasePath = DependencyService.Get<IDatabasePath>().GetLocalFilePath();
optionsBuilder.UseSqlite($"Filename={databasePath}");
}
}
namespace XamarinApp.Helpers
{
public interface IDatabasePath
{
Task<string> GetLocalFilePath();
}
}
不幸的是,我认为这段代码在 Hololens 上找不到 USB 棒。当我查看文件资源管理器时,我看到了包含所有数据的棒。在Unity App中也找不到棒子,虽然我这里用的是同样的代码,只是稍微修改了一下。
有谁知道我的错误在哪里,为什么我无法使用这两个应用程序中的任何一个访问 U 盘?有没有人尝试过类似的方法并且知道怎么做?
在此先感谢您的帮助。
非常感谢。
【问题讨论】:
标签: c# unity3d hololens xamarin.uwp usb-flash-drive