不久前我第一次用 Java 编写了我的应用程序,我使用应用程序的内部存储来保存玩家列表和一些 DLC。 Android 设备上的结构如下所示:
ca.bigbeanbag.myapp / files / backup / playerbackup.xml
我现在已经在 Flutter 中完全重写了应用程序(因此我也可以在 iOS 上发布),并且我希望能够从 java 版本迁移播放器备份。看来 flutter 使用不同的内部存储起点(它首先添加文件夹 app_flutter)。在从java版本升级到flutter版本的设备上,树看起来像:
ca.bigbeanbag.myapp /
.. app_flutter/files/backup <-- new flutter storage location
.. files/backup <-- old java storage location
因此,在第一次运行新的 flutter 版本的应用程序时,我只需使用父级来找到 java 版本文件,并将它们导入到新的 flutter 存储位置
var docsDir = await getApplicationDocumentsDirectory();
String oldBackupPath = docsDir.parent.path + '/files/backup/backup.xml';
String destinationPath = docsDir.path + '/files/backup/';
... and copy
在模拟器的调试模式下,这效果很好。
然而,在真实设备上,当我获得旧 java 文件夹 (ca.bigbeanbag.myapp/files) 的目录列表而不是在模拟器/调试模式下获得的目录列表时:
ca.bigbeanbag.myapp/files/
.. backup
.. dlc_stuff
我得到这个:
ca.bigbeanbag.myapp/files/
.. rList
.. generatefid.lock
.. PersistedInstallation.W0RFRkFVTFRd+(lots of letters).json
因此,在真实设备上释放时,我无法访问旧java版本的内部存储。
我不知道此时还能做什么。希望有人能提供一些想法/指导。
我从来没有确切地知道为什么我无法从新的 flutter/dart 版本访问 java 内部存储区域,但我确实发现它与使用相对引用有关。
在 flutter 版本中,内部存储存储在“app_flutter”下,并向上跳到父级并向下跳到 java-app 创建的文件夹,如下所示:
var docsDir = await getApplicationDocumentsDirectory();
// docsDir now equals "../ca.bigbeanbag.net.myapp/app_flutter/"
String oldBackupPath = docsDir.parent.path + '/javafiles/backup.xml';
不起作用。但是,如果我从顶部一直引用 java-app 创建的文件夹:
/sdcard/Android/data/... .../ca.bigbeanbag.myapp/javafiles/
它工作正常,我能够读取java文件。
希望这对其他人有帮助。感谢任何阅读该问题的人。