Android MediaPlayer java.io.IOException:准备失败:华为ALE-L21状态=0x1

Android MediaPlayer java.io.IOException:准备失败:华为ALE-L21状态=0x1,android,file-upload,download,media-player,Android,File Upload,Download,Media Player,我遇到了一个奇怪的问题。我的应用程序允许用户录制语音消息,并将其保存为.amr文件 String fileName = getFilesDir().getAbsolutePath() + "/voiceMessage.amr"; MediaRecorder mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutpu

我遇到了一个奇怪的问题。我的应用程序允许用户录制语音消息,并将其保存为.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);
录制后,用户可以播放其录制的消息,该消息按预期工作:

MediaPlayer mediaPlayer = new MediaPlayer();

try {
    fileName = getFilesDir().getAbsolutePath() + "/voiceMessage.amr";
    Log.i(TAG, fileName);
    mediaPlayer.setDataSource(fileName);
    mediaPlayer.prepare();
    mediaPlayer.start();
} catch (IOException e) {
}
Logcat为
文件名
打印
/data/data/com.messages.android/files/voiceMessage.amr
,这很好。保存语音信息后,我会将其上载到服务器,稍后为每个用户下载。下载的文件保存在内部存储器中

现在抛出异常的部分:

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) {

    }
}
Logcat打印
/data/data/com.messages.android/files/c02bfe404359860eb582af318afb1f41469514396529.amr
用于
voiceMessage.getAbsolutePath()
这很好。因此,该文件存在并位于内部存储器上。我不修改服务器端的文件。只是保存和下载

仍接收到mediaPlayer.prepare()的异常情况。:

例外情况仅出现在我们的开发电话华为ALE-L21上。两款不同的三星手机和一款不同的华为手机不会抛出例外

编辑:我尝试了两种不同的方法,但都没有成功

1.

FileInputStream fi = new FileInputStream(voiceMessage);
mediaPlayer.setDataSource(fi.getFD());
voiceMessage.setReadable(true, false);
mediaPlayer.setDataSource(voiceMessage.getAbsolutePath());
2.

FileInputStream fi = new FileInputStream(voiceMessage);
mediaPlayer.setDataSource(fi.getFD());
voiceMessage.setReadable(true, false);
mediaPlayer.setDataSource(voiceMessage.getAbsolutePath());
编辑3:
因此,我昨天尝试了一些东西:我更改了服务器端坏掉的设备上的语音消息文件的文件名,这样坏掉的设备上的用户将下载自己的语音消息,这是以前上传到服务器上的。播放自己的语音信息,即使是在下载之后,效果也不错。所以问题应该是录制时的输出格式,对吗?是否有一种适用于所有设备的适用于Android 4.1+的通用输出格式?

所有设备是否运行相同的操作系统?如果不是,抛出异常的设备的操作系统版本是什么?试试这个,工作设备:带Android 5.1.1的华为GRA-L09(构建号:GRA-L09C02B194)。不工作的设备:带有安卓5.0.1的ALE-L21(版本号:ALE-L21C432B194)。顺便说一句,看看我的3。更新