Android mediaPlayer 未正确发布

Android mediaPlayer not being correctly released

我正在尝试在单击按钮时在 android 小部件中播放声音,这是我当前的代码:

@Override
public void onReceive(Context context, Intent intent) {
    Boolean hasToPlayMedia = false;
    MediaPlayer mediaPlayer = new MediaPlayer();
    if (intent.getAction().equals("somevalue")) {
        mediaPlayer = MediaPlayer.create(context, R.raw.somevalue);
        hasToPlayMedia = true;
    // OTher conditionals here
    }
    if (hasToPlayMedia) {
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.start();
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.stop();
                mp.reset();
                mp.release();
                mp = null;
            }
        });
    }
    super.onReceive(context, intent);
}

然而,在控制台中我读到:

E/MediaPlayer﹕ Should have subtitle controller already set
W/MediaPlayer-JNI﹕ MediaPlayer finalized without being released

有时点击按钮一段时间后不会播放声音。

您必须在 class 内和方法范围外保留对 MediaPlayer 的静态引用。否则,OS 可能会清理其资源,然后当您尝试从 onCompletion() 方法内部访问它时,它将处于非法状态。