0

我有大量 mp3 文件 (+3GB) 需要包含在我为 Android 和 iOS 编写的应用程序中,以便离线使用。由于 Google Play Bundle 不能大于 2GB,自然我需要在初始应用程序运行时将这些 mp3 文件下载到本地目录。我已经编写了一个 html 网页,其中包含选择和播放具有同步屏幕文本和背景的 mp3 文件所需的所有功能。我还成功地使用 webview_flutter 离线加载和测试了我的网页,在资产目录中加载了一组有限的 mp3 文件。现在我需要包含所有 +3GB 的 mp3 文件,所以我已将它们下载到 ApplicationSupportDirectory,但似乎 webview_flutter 无法播放此目录中的 mp3 文件。我尝试将它们放在 ApplicationSupportDirectory 中,ApplicationDocumentsDirectory 或 ExternalStorageDirectory,但它们都不能从 webview_flutter 的页面访问。我还尝试将我的 index.html 加载到这些非资产目录中,但即使使用 Permission.storage.request() 并且在 manifest.xml 中声明了 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE、INTERNET 的权限,也会出现文件权限错误。现在用完了选项,您知道是否可以从 webview_flutter 中加载的网页链接非资产文件?加载字符串到 webview 方法可能不起作用,因为我在页面中链接了音频和 javascript。希望你们中的一些人能给我指明一个方向。先感谢您。html 进入这些非资产目录,但即使使用 Permission.storage.request() 并在 manifest.xml 中声明了 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE、INTERNET 的权限,也会出现文件权限错误。现在用完了选项,您知道是否可以从 webview_flutter 中加载的网页链接非资产文件?加载字符串到 webview 方法可能不起作用,因为我在页面中链接了音频和 javascript。希望你们中的一些人能给我指明一个方向。先感谢您。html 进入这些非资产目录,但即使使用 Permission.storage.request() 并在 manifest.xml 中声明了 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE、INTERNET 的权限,也会出现文件权限错误。现在用完了选项,您知道是否可以从 webview_flutter 中加载的网页链接非资产文件?加载字符串到 webview 方法可能不起作用,因为我在页面中链接了音频和 javascript。希望你们中的一些人能给我指明一个方向。先感谢您。你知道是否可以从 webview_flutter 中加载的网页链接非资产文件?加载字符串到 webview 方法可能不起作用,因为我在页面中链接了音频和 javascript。希望你们中的一些人能给我指明一个方向。先感谢您。你知道是否可以从 webview_flutter 中加载的网页链接非资产文件?加载字符串到 webview 方法可能不起作用,因为我在页面中链接了音频和 javascript。希望你们中的一些人能给我指明一个方向。先感谢您。

4

1 回答 1

0

找到了我自己的答案:需要在 webview_flutter 和非资产目录之间设置一个服务器。我使用包 local_assets_server.dart 并使用 LocalAssetsServer() 中的 rootDir 参数来调用并指向本地目录路径。可能需要将assetBasePath 保留为空白。当 webview_flutter 从这个服务器加载时,它会加载这个 rootDir 路径中的 index.html。

  _initServer() async{
    final server = new LocalAssetsServer(
      address: InternetAddress.loopbackIPv4,
      assetsBasePath: '',
      rootDir: rootPath,
    );

    print('rootDir for server init to $rootPath');
    final address = await server.serve();
    print('init server address: $address');

    setState(() {
      this.address = address.address;
      port = server.boundPort;
      print('server port: $port');
      isListening = true;
    });
  }

于 2021-05-23T01:13:25.200 回答