재생 버튼을 클릭시에 -38 ( 재생을 준비할 완료가 되지 않았을경우 뜨는 에러 )
가 뜨더군요..
최신 SDK 업데이트 이후 이런 문제가 생겨요..
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnInfoListener;
public class PlayerFunctions {
/* 글로벌 선언 */
static Boolean FirstLoad = true;
static TimerTask MyTimerTask;
public static boolean FromChart = true;
public static int CurrentMusicIndex = -1;
public static boolean PlayerLoop = false;
public static boolean PlayerShuffle = false;
public static boolean IsPreparing = false;
public static boolean IsBuffering = false;
/* 음악 목록 및 플레이어 선언 */
public static ArrayList<Music> MusicArrayList;
public static MediaPlayer MyMediaPlayer = new MediaPlayer();
/* 잠금 화면 리모트 컨트롤러 선언 */
public static RemoteController RemoteController = null;
public static void PlayerPlay(final Activity MyActivity, final Music MyMusic, final boolean fromChart) {
FromChart = fromChart;
if (IsPreparing == false) {
try {
// 플레이어 설정
MyMediaPlayer.stop();
MyMediaPlayer.reset();
MyMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
if (Build.MANUFACTURER.toLowerCase(Locale.getDefault()).equals("samsung")) {
MyMediaPlayer.setDataSource(MyMusic.Source);
} else {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Range", "bytes=0-0");
MyMediaPlayer.setDataSource(MyActivity, Uri.parse(MyMusic.Source), headers);
}
// 플레이어 준비
IsPreparing = true;
// - For MainActivity
if (MainActivity.MyActivity != null) {
MainActivity.TextTitle.setText(MyMusic.Name);
MainActivity.TextTime.setText("버퍼링 중...");
}
// - For ChartActivity
if (ChartActivity.MyActivity != null) {
ChartActivity.TextTitle.setText(MyMusic.Name);
ChartActivity.TextTime.setText("버퍼링 중...");
}
MyMediaPlayer.prepareAsync();
// 리모트 컨트롤러 설정
if (RemoteController == null && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
RemoteController = new RemoteController();
RemoteController.register(MyActivity);
}
// 재생 정보 변경 이벤트 초기화
MyMediaPlayer.setOnInfoListener(new OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {
IsBuffering = true;
} else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
IsBuffering = false;
}
return true;
}
});
// 재생 준비 완료 이벤트 초기화
MyMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
MyMediaPlayer.start();
// 정보 기본값 설정
int Duration = MyMediaPlayer.getDuration();
int CurrentPosition = MyMediaPlayer.getCurrentPosition();
// - For MainActivity
if (MainActivity.MyActivity != null) {
MainActivity.MusicSeekBar.setMax(Duration);
MainActivity.TextTime.setText(getTimeString(CurrentPosition) + " / " + getTimeString(Duration));
}
// - For ChartActivity
if (ChartActivity.MyActivity != null) {
ChartActivity.MusicSeekBar.setMax(Duration);
ChartActivity.TextTime.setText(getTimeString(CurrentPosition) + " / " + getTimeString(Duration));
}
if (FirstLoad == true) {
MyTimerTask = new TimerTask() {
@Override
public void run() {
if (MyMediaPlayer.isPlaying()) {
MyActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
int Duration = PlayerFunctions.MyMediaPlayer.getDuration();
int CurrentPosition = PlayerFunctions.MyMediaPlayer.getCurrentPosition();
// - For MainActivity
if (MainActivity.MyActivity != null) {
MainActivity.MusicSeekBar.setMax(Duration);
MainActivity.MusicSeekBar.setProgress(CurrentPosition);
MainActivity.TextTime.setText(getTimeString(CurrentPosition) + " / " + getTimeString(Duration));
}
// - For ChartActivity
if (ChartActivity.MyActivity != null) {
ChartActivity.MusicSeekBar.setMax(Duration);
ChartActivity.MusicSeekBar.setProgress(CurrentPosition);
ChartActivity.TextTime.setText(getTimeString(CurrentPosition) + " / " + getTimeString(Duration));
}
// 권한 검사 이벤트
if (CurrentPosition >= 120000 && MainActivity.currentHTML != null) {
// - LOGIN CHECK
if (MainActivity.currentHTML.contains("isLogged:true")) {
if (MainActivity.currentHTML.contains("isCoupon:false") && MainActivity.currentHTML.contains("isActiveMember:false")) {
PlayerNext(MyActivity, fromChart);
}
} else {
PlayerNext(MyActivity, fromChart);
}
}
}
});
}
}
};
Timer MyTimer = new Timer();
MyTimer.schedule(MyTimerTask, 0, 1000);
FirstLoad = false;
}
// 재생 완료 이벤트 초기화
MyMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if (IsPreparing == false && IsBuffering == false) {
// 재생 형식 설정
if (PlayerLoop) {
PlayerLoop(MyActivity, fromChart);
} else if (PlayerShuffle) {
PlayerShuffle(MyActivity, fromChart);
} else {
PlayerNext(MyActivity, fromChart);
}
}
}
});
// 정보 갱신
UpdatePlayer(false);
// 준비 완료
IsPreparing = false;
}
});