MediaPlayer를 확장하는 단일 클래스로 SoundManagement 용 패키지를 만들었습니다. 이 변수를 전역 적으로 제어하기를 바랬습니다. Android MediaPlayer 오류 (상태 1에서 시작, 오류 (-38,0), 오류 (-38,0))
package soundmanagement;
import android.content.Context;
import android.media.MediaPlayer;
import java.io.IOException;
public class MusicManager extends MediaPlayer {
public static MediaPlayer mediaPlayer = new MediaPlayer();
public void MusicManager() {
}
public static MediaPlayer create(Context context, int musicID) {
if (mediaPlayer != null) {
mediaPlayer.release();
}
mediaPlayer.create(context, musicID);
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
return mediaPlayer.create(context, musicID);
}
public void prepare() {
try {
mediaPlayer.prepare();
super.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
public void start() {
if (mediaPlayer != null) {
mediaPlayer.start();
}
super.start();
}
public void pause() {
mediaPlayer.pause();
super.pause();
}
public void stop() {
super.stop();
mediaPlayer.release();
}
public void release() {
mediaPlayer.release();
super.release();
}
public boolean isPlaying(boolean isPlaying) {
super.isPlaying();
return isPlaying;
}
public void setLooping(boolean setLoop) {
mediaPlayer.setLooping(setLoop);
super.setLooping(setLoop);
}
}
그리고 내 MainActivity.class에서
가에서 onCreate()에서, 내가 모두가onCreate()
에서이 코드를 작성할 수 있습니다 : :
MusicManager.mediaPlayer.create(MainActivity.this, R.raw.riseofcc);
MusicManager.mediaPlayer.start();
응용 프로그램 컴파일을하고 잘 실행 그냥 여기 내 코드입니다 일단 음악이 시작되면 음악이 재생되지 않습니다.
public static MediaPlayer create(Context context, int musicID) {
if (mediaPlayer != null) {
mediaPlayer.release();
}
mediaPlayer.create(context, musicID);
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
return mediaPlayer.create(context, musicID);
}
당신은 mediaPlayer.create을 (전화), 다음 .prepare는(), 후 작성 (: 당신은 MediaPlayer를에 호기심 접근 방식을 취하고
경우'MediaPlayer'는 다음'** **'MediaPlayer'입니다 오브젝트 MusicManager'. 그렇다면 왜 새로운'MediaPlayer'를 만들려고합니까? 그래서 두 개의'MediaPlayer'가 있습니까? 이게 네가 원하는거야? 어쩌면 그것이 당신이 원하는 것일 수도 있습니다. 나는 당신의 코드를 이해하지 못하지만, 그 실수를 전에 보았습니다. – ajb
@ajb ... 나는 문제는 MediaPlayer가 많은 내부 작업을 노출시키지 않고 마지막으로 많은 메서드를 표시한다는 것입니다. 그러나, 여전히 최적의 방법은 아닙니다. – ajacian81
예, 죄송합니다. 전 단지 전체 응용 프로그램 내에서 글로벌 미디어 플레이어가되고 싶었습니다. 여러 가지 활동을 조작 (일시 중지, 시작, 작성)하고 별도의 형식으로 필요합니다. 나는 각 Activity 내에서 하나의 MediaPlayer를 사용하려고 시도했으며, 일들이 빠르게 복잡해졌습니다. – Azurai