访问浮动资产时发生文件未找到异常

时间:2018-10-19 07:36:47

标签: java dart flutter filenotfoundexception

我正在尝试编写一个插件来播放存储在flutter包的assets文件夹中的音频文件

if(call.method.equals("playMusic"))
{
    Log.d(TAG, "onMethodCall: play music function called");

    String fileLocation = call.argument("file");
    Log.d(TAG, "onMethodCall: file requested is "+fileLocation);
    AssetManager assetManager = registrar.context().getAssets();
    String key = registrar.lookupKeyForAsset(fileLocation);
    Log.d(TAG, "onMethodCall: key is "+key);
    AssetFileDescriptor fd;
    MediaPlayer mediaPlayer = new MediaPlayer();
    try {
        Log.d(TAG, "onMethodCall: found assets " + Arrays.toString(assetManager.list("assets/")));
        fd= assetManager.openFd(key);
        mediaPlayer.setDataSource(fd.getFileDescriptor(),fd.getStartOffset(),fd.getLength());
        fd.close();
        mediaPlayer.prepare();
        mediaPlayer.start();
        result.success("played successfully");
  }
  catch (Exception e){
    Log.d(TAG, "onMethodCall: exception occured "+e.toString());
    result.success("playing failed");
  }
}

fileLocation正确传递为

  

assets / river.m4a

我检查后发现,注册服务商查找的密钥是

  

flutter_assets / assets / river.m4a

文件位于

包中
  

assets / flutter_assets / assets / river.m4a

但是当我运行应用程序时,它仍会抛出

  

D / TunePlugin:onMethodCall:发生异常java.io.FileNotFoundException:flutter_assets / assets / river.m4a

3 个答案:

答案 0 :(得分:2)

在您的pubspec.yaml文件中添加此...

flutter:
    assets:
-assets/flutter_assets/assets/river.m4a

答案 1 :(得分:0)

当我通过终端(即Git bash)运行相同的应用程序时,我感到很惊讶 它没有给我带来任何问题,而且歌曲播放没有任何错误。当我通过android studio运行同一应用程序时,它会产生FileNotFoundException

答案 2 :(得分:0)

通常在您尝试访问压缩文件时发生。

您可以将以下指令添加到位于build.gradle的{​​{1}}中:

android/app/build.gradle