我写了个广播接受类,获取手机收到的短信,有一个功能是收到指定短信就响铃,创建了MediaPlayer,然后start,之前调试都能正常响,后来就报错内存不足了E/MediaPlayer: error (1, -19)
在后面加上释放语句的话还是会报错,

解决方案 »

  1.   

    加上释放语句后控制台没有报错,但还是没有声音,控制台:W/MediaPlayer: mediaplayer went away with unhandled events
      

  2.   

    创建没问题,释放有问题,不要直接释放。使用一个对象,添加完成事件和错误事件,完成事件写上seekto(0)可以重复使用,错误事件写重新初始化,只有页面关闭或不再需要时再释放。public synchronized void initMediaPlayer(){
            if (mMediaPlayer == null){
                mMediaPlayer = MediaPlayer.create(this, R.raw.music);
                mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        mMediaPlayer.seekTo(0);
                    }
                });
                mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                    @Override
                    public boolean onError(MediaPlayer mp, int what, int extra) {
                        release();
                        initMediaPlayer();
                        return false;
                    }
                });
            }
        }    public void start(){
            if (mMediaPlayer != null){
                mMediaPlayer.start();
            }
        }
        
        public void release(){
            if (mMediaPlayer != null){
                mMediaPlayer.stop();
                mMediaPlayer.release();
                mMediaPlayer = null;
            }
        }