Android内部共享存储中的Xamarin SqlLite数据库
我的应用程序将离线使用,我计划每天通过USB电缆进行拉/推同步。我的用户处于一种非常原始的状态:没有wifi,也没有手机发射塔。我的问题不是关于同步,而是获取对数据的访问,以便我可以同步 我连接电缆,选择USB进行文件传输,我可以看到内部共享存储。但是我在任何地方都找不到我的SqlLite数据库。我已尝试为数据库使用以下路径:Android内部共享存储中的Xamarin SqlLite数据库,android,sqlite,xamarin,Android,Sqlite,Xamarin,我的应用程序将离线使用,我计划每天通过USB电缆进行拉/推同步。我的用户处于一种非常原始的状态:没有wifi,也没有手机发射塔。我的问题不是关于同步,而是获取对数据的访问,以便我可以同步 我连接电缆,选择USB进行文件传输,我可以看到内部共享存储。但是我在任何地方都找不到我的SqlLite数据库。我已尝试为数据库使用以下路径: Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData); Environ
Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);
Environment.GetFolderPath(Environment.SpecialFolder.Personal);
Android.App.Application.Context.FilesDir.AbsolutePath;
该应用程序可以很好地处理这些路径中的任何一条,数据被存储和检索,但我无法从我的电脑上看到数据库
我也试过这个,但它爆炸了:
Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;
Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;
我已尝试使用Xamarin Live进行调试,但出现以下错误:
“您需要调用SQLitePCL.raw.SetProvider();”
我已尝试添加console.writeline
和Log.Error
以添加一些诊断,但在内部共享存储中找不到任何日志文件
我在清单中拥有WRITE\u EXTERNAL\u STORAGE
和WRITE\u EXTERNAL\u STORAGE
权限;即使我认为那是没有必要的
如果我可以将文件存储在内部共享存储中,那么我可以将数据库放在那里并访问它以进行同步。我可以创建一个简单的文本记录工具,在同一个地方写一个文本日志
40年来我很少寻求帮助,但我已经这样做了好几天了。谢谢 SQLite db存储在应用程序专用内存中,无法通过USB访问,请尝试将db的内容导出到内部内存或外部内存中的外部文件,以便能够通过USB chord访问它。SQLite db存储在应用程序专用内存中,无法通过USB访问,尝试将数据库的内容导出到内部内存或外部内存中的外部文件,以便能够通过USB chord访问该文件。要将文件导出到可通过USB访问的内部共享存储,请执行3个步骤: 1:获取运行时权限 ActivityCompat.RequestPermissions(活动,新字符串[]{Manifest.Permission.WriteExternalStorage,Manifest.Permission.ReadExternalStorage},1) 2) 使用以下路径:
字符串extPath=Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; extPath=Path.Combine(extPath,“RtTrace.txt”); AppendAllText(extPath,“新内容”+System.Environment.NewLine) 3) 介质扫描生成的文件以使其可见:
MediaScannerConnection.ScanFile(Android.App.Application.Context,新字符串[]{extPath},null,null) 要将文件放入可通过USB访问的内部共享存储,需要执行3个步骤: 1:获取运行时权限 ActivityCompat.RequestPermissions(活动,新字符串[]{Manifest.Permission.WriteExternalStorage,Manifest.Permission.ReadExternalStorage},1) 2) 使用以下路径:
字符串extPath=Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; extPath=Path.Combine(extPath,“RtTrace.txt”); AppendAllText(extPath,“新内容”+System.Environment.NewLine) 3) 介质扫描生成的文件以使其可见:
MediaScannerConnection.ScanFile(Android.App.Application.Context,新字符串[]{extPath},null,null) Environment.SpecialFolder.Personal上的路径是指只有应用程序(例如,当您清除应用程序中的数据时,操作系统本身)可以访问的私有区域。我不知道
ApplicationData
您可以轻松地将应用程序文件(受保护的文件)复制到公共文件夹,如下载
,或在公共存储空间中创建一个新文件夹MyAppDirectory
,以允许从其他设备进行访问。然后,您可以清除不再需要的本地数据(在同步过程之后)
要在Android上创建新的公用文件夹,请执行以下操作:
var folder = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "MyAppDirectory");
System.IO.Directory.CreateDirectory(folder);
您将得到以下结果:
然后,复制文件:
var newFile = Path.Combine(folder, "MySharedFile"); // The database, xml, json, text or any file you want to share
var sourceFullName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"MyOriginalFile");
System.IO.File.Copy(sourceFullName, newFile, true /* overwrite */);
我希望它能有所帮助。Environment.SpecialFolder.Personal上的路径指的是一个只有应用程序(以及在清除应用程序中的数据时操作系统本身)可以访问的私人区域。我不知道
ApplicationData
您可以轻松地将应用程序文件(受保护的文件)复制到公共文件夹,如下载
,或在公共存储空间中创建一个新文件夹MyAppDirectory
,以允许从其他设备进行访问。然后,您可以清除不再需要的本地数据(在同步过程之后)
要在Android上创建新的公用文件夹,请执行以下操作:
var folder = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "MyAppDirectory");
System.IO.Directory.CreateDirectory(folder);
您将得到以下结果:
然后,复制文件:
var newFile = Path.Combine(folder, "MySharedFile"); // The database, xml, json, text or any file you want to share
var sourceFullName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"MyOriginalFile");
System.IO.File.Copy(sourceFullName, newFile, true /* overwrite */);
我希望这会有所帮助。这些位置位于应用程序的沙箱中,因此是私有的,除非您的Android设备已扎根,否则无法通过
adb
(即文件传输)获得。您可以将sqlite db的副本存储在公共外部存储位置(即应用程序外部)并在那里访问。从笔记本电脑上,我可以看到“内部共享存储”,这与文件资源管理器中显示的“本地”和“内部存储”位置相同。很多应用程序将文件放在这里:摄像头、whatsApp、警报等。当我这样做时,它不可见,字符串extPath=Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic);extPath=Path.Combine(extPath,“RtTrace.txt”);AppendAllText(extPath,“text content”+Environment.NewLine);我想我有办法解决你的问题。我面临着类似的问题。我回家后再发。你有没有找到解决办法?我也面临着同样的挑战,我希望我的用户能够通过连接电缆在手机和桌面之间同步数据,但找不到任何相关文档。这些位置位于应用程序的沙箱中,因此是私有的,除非您的安卓系统支持,否则无法通过adb
(即文件传输)获得