访问flutter assets时出现File not Found异常
File not Found Exception occurs when accessing flutter assets
我正在尝试编写一个插件来播放存储在 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
我查了一下,注册商查询的key是
flutter_assets/assets/river.m4a
并且文件存在于
的包中
assets/flutter_assets/assets/river.m4a
但是当我 运行 应用程序时它仍然抛出
D/TunePlugin: onMethodCall: exception occured java.io.FileNotFoundException: flutter_assets/assets/river.m4a
令我惊讶的是,当我 运行 通过终端使用相同的应用程序时,即 Git bash
它没有给我带来任何问题,而且歌曲播放没有任何错误。当我通过 android studio 运行 同一个应用程序时,它会产生 FileNotFoundException
在你的 pubspec.yaml 文件中添加这个...
flutter:
assets:
-assets/flutter_assets/assets/river.m4a
这通常发生在您尝试访问压缩文件时。
您可以将以下指令添加到位于 android/app/build.gradle
的 build.gradle
:
aaptOptions {
noCompress 'm4a'
}
我正在尝试编写一个插件来播放存储在 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
我查了一下,注册商查询的key是
flutter_assets/assets/river.m4a
并且文件存在于
的包中assets/flutter_assets/assets/river.m4a
但是当我 运行 应用程序时它仍然抛出
D/TunePlugin: onMethodCall: exception occured java.io.FileNotFoundException: flutter_assets/assets/river.m4a
令我惊讶的是,当我 运行 通过终端使用相同的应用程序时,即 Git bash 它没有给我带来任何问题,而且歌曲播放没有任何错误。当我通过 android studio 运行 同一个应用程序时,它会产生 FileNotFoundException
在你的 pubspec.yaml 文件中添加这个...
flutter:
assets:
-assets/flutter_assets/assets/river.m4a
这通常发生在您尝试访问压缩文件时。
您可以将以下指令添加到位于 android/app/build.gradle
的 build.gradle
:
aaptOptions {
noCompress 'm4a'
}