QCMediaPlayer mediaplayer NOT present(android)

时间:2024-01-20 08:23:09

出现了“QCMediaPlayer mediaplayer NOT present”这个错误!!!我的手机是小米手机2,我给它刷机刷到了Android 4.4.4,后来我学长是这样解决的:case R.id.btn_Start2 :// 播放SD卡中的音频资源!!!                                        mediaPlayer = MediaPlayer.create(this,
                                                        Uri.parse("storage/sdcard0/music.mp3"));
                                        mediaPlayer.start();// 开始播放!!!
                                        break;
                                //System.out.println(Environment.getExternalStorageDirectory().getPath());用来输出SD卡的根目录!!!

我的全部代码是:
package com.example.myplayermusic;

import android.support.v7.app.ActionBarActivity;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends ActionBarActivity
                implements
                        OnClickListener,
                        OnCompletionListener {

private MediaPlayer mediaPlayer;
        private Button btn_Start1;
        private Button btn_Start2;
        private Button btn_Stop;
        private Button btn_Pause;

@Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

btn_Start1 = (Button) findViewById(R.id.btn_Start1);
                btn_Start2 = (Button) findViewById(R.id.btn_Start2);
                btn_Stop = (Button) findViewById(R.id.btn_Stop);
                btn_Pause = (Button) findViewById(R.id.btn_Pause);

btn_Start1.setOnClickListener(this);
                btn_Start2.setOnClickListener(this);
                btn_Stop.setOnClickListener(this);
                btn_Pause.setOnClickListener(this);
        }

@Override
        public void onCompletion(MediaPlayer mp) { // 音频播完后调用onCompletion方法!!!
                mp.release(); // 音頻播完后!!!通常需要释放音频资源!!!
                setTitle("资源已经释放!!!");
        }

@Override
        public void onClick(View view) {
                try {
                        switch (view.getId()) {

case R.id.btn_Start1 :// 播放内部音频资源!!!

mediaPlayer = MediaPlayer.create(this, R.raw.music);// 通过MediaPlayer.create方法的第二个参数指定内部音频文件的ID,并创建MediaPlayer对象!!!

mediaPlayer.setOnCompletionListener(this);// 指定播放完成的监听器!!!
                                        if (mediaPlayer != null) {
                                                mediaPlayer.stop();// 停止播放!!!
                                        }
                                        mediaPlayer.prepare();// 加载音频资源!!!
                                        mediaPlayer.start();// 开始播放!!!
                                        break;

case R.id.btn_Start2 :// 播放SD卡中的音频资源!!!
                                        mediaPlayer = MediaPlayer.create(this,
                                                        Uri.parse("storage/sdcard0/music.mp3"));
                                        mediaPlayer.start();// 开始播放!!!
                                        break;
                                //System.out.println(Environment.getExternalStorageDirectory().getPath());用来输出SD卡的根目录!!!

case R.id.btn_Stop :// 終止播放!!!
                                        if (mediaPlayer != null) {
                                                
                                                mediaPlayer.stop();// 终止播放!!!
                                        }
                                        break;

case R.id.btn_Pause :// 暂停播放!!!
                                        if (mediaPlayer != null) {
                                                if ("继续播放".equals(btn_Pause.getText().toString())) {
                                                        
                                                        mediaPlayer.start();// 播放已经暂停,可以继续播放!!!
                                                        btn_Pause.setText("暂停播放");
                                                } else if ("暂停播放"
                                                                .equals(btn_Pause.getText().toString())) {
                                                        
                                                        mediaPlayer.pause();// 暂停播放音频!!!
                                                        btn_Pause.setText("继续播放");
                                                }
                                        }

}
                } catch (Exception e) {

}
        }
}

I know that this is not an answer for "Why" this is happening but if someone wants to make it work (at least for me it worked), you can initialize the MediaPlayer not by creating a new instance and setting the data source but by creating it using the static method create:

MediaPlayer player = MediaPlayer.create(this, Uri.parse(sound_file_path));

or

MediaPlayer player = MediaPlayer.create(this, soundRedId, loop);