Я проигрываю звук с помощью этого метода:
public async Task<bool> PlaySound(string fileName)
{
bool done = false;
Stopwatch sw = new Stopwatch();
MediaPlayer mp = new MediaPlayer();
sw.Start();
var fd = Assets.OpenFd(fileName);
mp.Prepared += (sender, e) =>
{
mp.Start();
};
mp.Error += (sender, e) =>
{
done = true;
};
mp.Completion += (sender, e) =>
{
done = true;
};
mp.SetDataSource(fd.FileDescriptor, fd.StartOffset, fd.DeclaredLength);
mp.Prepare();
while (done == false && sw.ElapsedMilliseconds < 10000)
await Task.Delay(100);
return true;
}
private async void BtnSave_Click(object sender, EventArgs e)
{
if (recorder.recording == true)
{
await PlaySound("saving_video.mp3");
recorder.SavePerm();
}
else
await PlaySound("the_camera_is_not_currently_recording.mp3");
}
У меня также есть экземпляр SpeechRecognizer
запущен и MediaRecorder
для записи с камеры.
Через некоторое время отдавая ту же голосовую команду распознавателю речи.
Каждый раз, когда он начинает воспроизводить звук, создавая новый экземпляр MediaPlayer
с
MediaPlayer mp = new MediaPlayer();
, я получаю следующее java ошибка в журнале отладки:
08-01 22:38:42.151 E/ExtMediaPlayer-JNI(22934): env->IsInstanceOf fails
08-01 22:38:42.151 E/MediaPlayer-JNI(22934): JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
08-01 22:38:42.151 E/ExtMediaPlayer-JNI(22934): env->IsInstanceOf fails
08-01 22:38:42.151 E/MediaPlayer-JNI(22934): JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
Каждый раз, когда он пытается воспроизвести звук.
Исключение не генерируется, и программа продолжает выполняться, но звук не воспроизводится снова до тех пор, пока служба перезапущен.
Как решить эту проблему?