In fact, this problem occurs if Media Player is in the wrong state.
If your MediaPlayer is in Initialized-State, you cannot call start(). So you need to wait while your MediaPlayer is in position Prepared-State.
You can search for a media planner only in a state of readiness, start and pause.
:
. , .
mediaPlayer.reset();
try {
.......
.......
currentPosition = mediaPlayer.getCurrentPosition();
......
} catch (IllegalStateException e) {
mediaPlayer.reset();
currentPosition = mediaPlayer.getCurrentPosition();
}
mediaPlayer.prepareAsync();
:
java.lang.IllegalStateException MediaPlayer.getCurrentPosition
Update1:
, . , .
try {
....
currentPosition = mediaPlayer.getCurrentPosition();
....
} catch (final Exception e) {
e.printStackTrace();
if (e instanceof IllegalStateException) {
.......
if (retry) {
mediaPlayer.reset();
currentPosition = mediaPlayer.getCurrentPosition();
} else {
throw e;
}
}
}
UPDATE2:
, . , .
try {
....
currentPosition = mediaPlayer.getCurrentPosition();
....
} catch (final Exception e) {
e.printStackTrace();
if (e instanceof IllegalStateException) {
.......
boolean checkAgain = true;
int counter = 0;
for(int i = 0; i < 2; i++){
if (checkAgain) {
mediaPlayer.reset();
currentPosition = mediaPlayer.getCurrentPosition();
if(currentPosition > 0) {
checkAgain = false;
counter++;
}
} else {
if(counter == 0){
throw e;
}
}
}
}
}
UPDATE4:
IllegalStateException, prepare() prepareAsync()
."" , /,
screenOnWhilePlaying, ,
.
, start(). start()
, MediaPlayer Started.
isPlaying() , , MediaPlayer
.
""
OnBufferingUpdateListener.onBufferingUpdate()
, OnBufferingUpdateListener
setOnBufferingUpdateListener(OnBufferingUpdateListener).
/. start()
MediaPlayer, Started.
, isPlaying() . , :
try {
....
currentPosition = mediaPlayer.getCurrentPosition();
....
} catch (final Exception e) {
e.printStackTrace();
if (e instanceof IllegalStateException) {
.......
boolean checkAgain = true;
int counter = 0;
for(int i = 0; i < 2; i++){
if (checkAgain) {
mediaPlayer.reset();
if(mediaPlayer != null & mediaPlayer.isPLaying()) {
currentPosition = mediaPlayer.getCurrentPosition();
} else {
currentPosition = 0;
}
if(currentPosition > 0) {
checkAgain = false;
counter++;
}
} else {
if(counter == 0){
throw e;
}
}
}
}
}