Я пытаюсь написать плагин для воспроизведения аудиофайлов, которые хранятся в папке активов пакета флаттера и сделали так:
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");
}
}
Расположение файла правильно передается как
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