Java Android应用程序在播放声音时崩溃

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

我正在开发一个免费的字母表应用程序,但我不是Java开发人员。我制作了一个HTML页面,其中大约有150个
.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,我不知道那个功能,我的错。