你会从中得到一些乐趣。基本上,在有人实现插件来访问 APK 扩展文件之前,您将不得不编写 java 代码来连接到 Flutter。
这并不是太难,只是意味着你必须学习平台渠道 https://flutter.dev/docs/development/platform-integration/platform-channels并编写一些本机 Android 代码。该文档在解释平台通道方面可能比我做得更好,但基本上最简单的方法是使用 MethodChannel 将数据从 dart 传递到本机,反之亦然。
您首先要做的是设置一个方法通道来启动此过程并使用类似的内容调用它getObbFolder
.
在 Android 方面,您需要做的第一件事是确保您的应用程序确实已下载文件。根据安卓文档 https://developer.android.com/google/play/expansion-files#Downloading,您不能保证它们会是这样,因此您需要编写逻辑来下载它们。我建议使用下载库 https://developer.android.com/google/play/expansion-files#AboutLibraries他们提供了各种需要担心的事情,例如设备存储空间不足、网络连接、显示进度等。我认为这方面的文档相当简单(如果您有问题,我建议您询问新的问题)特定于它的问题。
完成此操作后,您需要获取该文件的路径,并在需要时请求读取该文件的权限。某些 Android 版本和其他版本的某些设备(说实话,这听起来有点冒险),您需要读取文件的权限,而在其他版本中则不需要。因此,如果尝试失败,最好只是尝试并请求许可。
获取正在使用的保存目录context.getObbDir() https://developer.android.com/reference/android/content/Context.html#getObbDir()
然后这是从 android 文档中执行此操作的一种方法:
File obb = new File(obb_filename);
boolean open_failed = false;
try {
BufferedReader br = new BufferedReader(new FileReader(obb));
open_failed = false;
ReadObbFile(br);
} catch (IOException e) {
open_failed = true;
}
if (open_failed) {
// request READ_EXTERNAL_STORAGE permission before reading OBB file
ReadObbFileWithPermission();
}
对于不执行运行时权限检查的版本,请将其添加到您的应用程序清单中:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Android 不建议总是请求权限,因为有时 Obb 文件夹不需要 READ_EXTERNAL_STORAGE 权限。
现在你有两个选择。一是你可以将该路径传递回 flutter,然后使用 flutter 的文件读取 https://flutter.dev/docs/cookbook/persistence/reading-writing-files#4-read-data-from-the-file如果文件是您可以直接读取的内容,则可以对数据执行某些操作。如果不是,您可以使用 flutter 或使用 java/kotlin 解压它,然后将路径传回解压文件。
如果您选择从 android 解压文件,您应该将其解压到 flutter 知道的目录之一(例如使用 path_provider 插件),或者写入您想要的任何位置(并有权),然后简单地将路径传回扑动。
希望有帮助!