android - 仅创建一个Media Player实例

标签 android audio media-player instance android-mediaplayer

我在Web View 中播放声音文件,并使用Javascript调用它们。

这是我使用的代码,但是每次我将新声音称为mediaplayer实例时都会创建它,因此我无法停止已经播放的声音并且正在运行太多的媒体播放器。

public class AudioInterface {
    Context mContext;

    AudioInterface(Context c) {
        mContext = c;
    }

    //Play an audio file from the webpage
    @JavascriptInterface
    public void playAudio(String aud) {
        final MediaPlayer mp;
        try {
            AssetFileDescriptor fileDescriptor =
                    mContext.getAssets().openFd(aud);

            mp = new MediaPlayer();
            mp.setDataSource(fileDescriptor.getFileDescriptor(),
                fileDescriptor.getStartOffset(),
                fileDescriptor.getLength());
            fileDescriptor.close();
            mp.prepare();
            mp.start();
        }

        catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
};

如何只创建一个mediaplayer实例,以便在播放新实例之前停止当前声音?

最佳答案

以此替换您的代码。注意我是如何在playAudio(...)之外初始化MediaPlayer的:

public class AudioInterface {

    Context mContext;
    final MediaPlayer mp;

    AudioInterface(Context c) {
        mContext = c;
        mp = new MediaPlayer();
    }

    // Play an audio file from the webpage
    @JavascriptInterface
    public void playAudio(String aud) {

        try {
            AssetFileDescriptor fileDescriptor = mContext.getAssets().openFd(aud);

            mp.reset();
            mp.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());
            fileDescriptor.close();
            mp.prepare();
            mp.start();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

关于android - 仅创建一个Media Player实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30336426/

相关文章:

java - 如何在android中将位图转换为字节数组,将字节数组转换为位图?

安卓SDK安装(adt-bundle-windows-x86_64-20131030)

ios - UIImageView图像随着不同的歌曲而变化

java - 使用默认媒体播放器播放流视频

c# - 如何实例化uwp Windows.Media.Playback.MediaPlayer?

android - 通过 webview 从 Activity 导航到互联网后失去控制

java - 找不到 com.android.tools.build :aapt2 AndroidStudio

php - 将base64转换为php音频文件中的声音文件

iOS Audio Streaming 并在音频播放完成后将音频文件保存到文档目录

algorithm - WIN32音频采样率转换