【发布时间】:2020-12-06 12:15:20
【问题描述】:
我有一个简单的录音机应用程序。当用户录制某些内容时,它会保存在外部存储中,然后从那里播放。
除了搭载 Android 6 的华为 P8 Lite 智能手机外,一切正常。
这是我播放声音的方式:
Thread th=new Thread(new Runnable() {
@Override
public void run() {
try {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(view.getContext(), uri);
mp.prepare();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//send message to handler
}
});
th.start();
此时 Uri 确实存在,并且该文件也确实存在于目标中。为什么我的 mediaPlayer 没有播放任何内容?权限是在它尝试创建 MediaPlayer 时给出的,因此它不应该是权限问题。
我在 logcat 中得到的只是:
W/MediaPlayer-JNI: MediaPlayer finalized without being released
I/MediaPlayer: setDataSource(34, 0, 576460752303423487)
I/MediaPlayer: [HSM] stayAwake true uid: 10255, pid: 22592
E/MediaPlayer: error (-19, 0)
E/MediaPlayer: Error (-19,0)
就像我说的,它在我测试的所有其他设备(Android 10 和 Android 9)上都能正常工作
编辑
这是我尝试过的: 我创建了从 API 18 到 30 的每个 API 级别的模拟器,它在每个模拟器上都可以正常工作。 我将华为 P8 Lite 智能手机重置为出厂设置。 我检查了声音文件是否正确保存,以及当我在保存它的文件夹中导航时是否可以手动打开并播放它(它工作得很好,所以它与保存声音的代码无关) 我真的没有想法了。
希望有人能帮忙,谢谢!
【问题讨论】:
标签: java android audio android-mediaplayer android-external-storage