Java Android应用程序在播放声音时崩溃
我正在开发一个免费的字母表应用程序,但我不是Java开发人员。我制作了一个HTML页面,其中大约有150个Java Android应用程序在播放声音时崩溃,java,android,media-player,Java,Android,Media Player,我正在开发一个免费的字母表应用程序,但我不是Java开发人员。我制作了一个HTML页面,其中大约有150个.png图片和.mp3声音文件对。例如,apple.png和apple.mp3将是一对,而且还会有更多 我使用webview显示带有图片的网页,并了解用户何时尝试听到声音。以下是我当前使用的代码: index.html: ...<a href="mp3/apple.mp3"><img src="apple.png"></a>... alphabe
.png
图片和.mp3
声音文件对。例如,apple.png
和apple.mp3
将是一对,而且还会有更多
我使用webview显示带有图片的网页,并了解用户何时尝试听到声音。以下是我当前使用的代码:
index.html:
...<a href="mp3/apple.mp3"><img src="apple.png"></a>...
alphabetActivity.java:
...public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.endsWith(".mp3")){
MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(url));
Toast.makeText(HelloWebviewActivity.this, url, Toast.LENGTH_SHORT).show();
mediaPlayer.start();
} else {
Toast.makeText(HelloWebviewActivity.this, "not mp3", Toast.LENGTH_SHORT).show();
}
return true;
}...
现在这个代码正在运行。感谢帮助=)据我所知,MediaPlayer.create()是同步的。因此,它会在调用位置阻止UI,从而创建一个应用程序无响应错误。要解决这个问题,您需要使用异步
MediaPlayer.prepareAsync()
调用。详情请参阅:
更准确地说,不是:
MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(),Uri.parse(url));
你应该做类似的事情:
final MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(getApplicationContext(), Uri.parse(url));
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
});
找到了我自己解决这个问题的方法 我已将所有声音复制到res/raw文件夹,将index.html中的链接从“mp3/apple.mp3”更改为“apple”,并使用以下代码:
if(mPlayer!=null){
mPlayer.stop();
mPlayer.release();}
int id = getResources().getIdentifier(url.substring(26), "raw", getPackageName());;
mPlayer = MediaPlayer.create(getApplicationContext(), id);
mPlayer.start();
if(mPlayer!=null){
mPlayer.stop();
mPlayer.release();}
int id = getResources().getIdentifier(url.substring(26), "raw", getPackageName());;
mPlayer = MediaPlayer.create(getApplicationContext(), id);
mPlayer.start();
现在这个代码正在运行。谢谢你的帮助=)你在logcat上找到什么了吗?还有一条评论,你需要在使用mediaplayer后释放它,否则在用户尝试播放一些音频文件后,混音器会满的。你应该从logcat发布异常,这里是如何得到它的:放弃你自己的问题而不是编辑问题和从不验证答案并不令人震惊。rds,我不知道那个功能,我的错。