相关疑难解决方法(0)

如何检测声音文件何时完成?

我在广播接收器活动中使用此代码播放声音文件:

notification.sound = Uri.parse("android.resource://emad.app/raw/seven_chimes");
Run Code Online (Sandbox Code Playgroud)

我想检测这个文件何时播放完毕.

我尝试了这样的循环,但我认为这对媒体播放器只有好处,因为即使我确定声音文件仍在播放,它总是=假:

/*
 * Stay here until the chime sound is finished.
 */
   while (manager.isMusicActive()){
   }
Run Code Online (Sandbox Code Playgroud)

你能告诉我应该用什么代替manager.isMusicActive()吗?

android while-loop

45
推荐指数
1
解决办法
3万
查看次数

Xamarin使用CrossSimpleAudioPlayer播放声音

我想播放使用CrossSimpleAudioPlayer插件下载的声音。

我实例化并初始化了插件,并且一切都可以在IOS上正常运行,但是在android上,当我加载文件“ Java.IO.FileNotFoundException”但文件存在并且具有读取权限时,它给了我这个错误

并在控制台上显示此“ [MediaPlayer]错误(1,-2147483648)”。

我以这种方式加载剪辑

ISimpleAudioPlayer player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
player.Load("/data/user/0/com.my.app/files/20.wav");
Run Code Online (Sandbox Code Playgroud)

当我改为加载Stream时,抛出错误“ Java.IO.IOException:准备失败。:status = 0x1”

var temp = new MemoryStream(DependencyService.Get<IFileHelper>().GetFileAsByte(path));
//This works fine and loads the file
player.Load(temp); //throws the error
Run Code Online (Sandbox Code Playgroud)

如果我加载链接而不是本地文件,则可以正常工作,但是我需要本地文件。

我不知道为什么这会在Android上发生

xamarin xamarin.forms

9
推荐指数
1
解决办法
437
查看次数

MediaPlayer java.io.IOException: Prepare failed.: status=0x1 with Huawei ALE-L21

我遇到了一个奇怪的问题。我的应用程序允许用户录制将保存为 .amr 文件的语音消息。

String fileName = getFilesDir().getAbsolutePath() + "/voiceMessage.amr";

MediaRecorder mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);
mediaRecorder.setOutputFile(fileName);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
Run Code Online (Sandbox Code Playgroud)

录制后,用户可以播放他录制的消息,按预期工作:

MediaPlayer mediaPlayer = new MediaPlayer();

try {
    fileName = getFilesDir().getAbsolutePath() + "/voiceMessage.amr";
    Log.i(TAG, fileName);
    mediaPlayer.setDataSource(fileName);
    mediaPlayer.prepare();
    mediaPlayer.start();
} catch (IOException e) {
}
Run Code Online (Sandbox Code Playgroud)

Logcat 打印/data/data/com.messages.android/files/voiceMessage.amrfileName,这很好。保存语音消息后,我会将其上传到我的服务器,稍后为每个用户下载。下载的文件保存在内部存储器中。

现在抛出异常的部分:

MediaPlayer mediaPlayer = new MediaPlayer();
File voiceMessage = user.getVoiceMessageFile(context);

if (voiceMessage.exists()) {
    try {
        Log.i(TAG, voiceMessage.getAbsolutePath());
        mediaPlayer.setDataSource(voiceMessage.getAbsolutePath());
        mediaPlayer.prepare();
        mediaPlayer.start();
    } catch (IOException e) {

    }
}
Run Code Online (Sandbox Code Playgroud)

logcat的版画/data/data/com.messages.android/files/c02bfe404359860eb582aff318afb1f41469514396529.amrvoiceMessage.getAbsolutePath()这是罚款。所以该文件存在并且在内部存储中。我不修改服务器端的文件。只需保存和下载。 …

android file-upload download media-player

5
推荐指数
0
解决办法
848
查看次数