出現了“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);