How to play audio continuously while orientation changes in Android?
Simplest Answer for this question.
@Override
protected void onSaveInstanceState(Bundle outState)
{
outState.putInt("possition", mpbg.getCurrentPosition());
mpbg.pause();
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
int pos = savedInstanceState.getInt("possition");
mpbg.seekTo(pos);
super.onRestoreInstanceState(savedInstanceState);
}
When we declare mediaplayer as a static variable then only one instance of mp will exist. Suppose our Activity orientation changes now, Everything will be recreated on orientation change but Mp variable will not be recreated because of static property. In this way we just make a condition
if(mp!=null && !mp.isPlaying()){
mp = MediaPlayer.create(getApplicationContext(), R.raw.subhanallah);
playMusic();
}
in our onCreate() method, this will check whether music is already playing or not, if its playing then if condition will not allow application to start music player again. and if Music is not playing then if condition will allow the application to restart the music.
Here is your update code:
public class Audio_Activity extends Activity {
static MediaPlayer mp = null;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if(isLaunched)
{
setContentView(R.layout.audio);
}
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
length = settings.getInt("TheOffset", 0);
init();
prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(mp == null)
{
initializeMP();
}
if(!mp.isPlaying())
{
playMusic();
}
mp.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer arg0)
{
// TODO Auto-generated method stub
}
});
}
private void playMusic()
{
httpGetAsynchTask httpGetAsyncTask = new httpGetAsynchTask();
httpGetAsyncTask.execute();
}
public void initializeMP()
{
mp = MediaPlayer.create(getApplicationContext(), R.raw.subhanallah);
}
class httpGetAsynchTask extends AsyncTask<String,Integer, Void>
{
protected void onPreExdcute()
{
}
@Override
protected Void doInBackground(String... arg0)
{
// TODO Auto-generated method stub
final SharedPreferences.Editor prefsEdit = prefs.edit();
Log.e("Song is playing", "in Mediya Player ");
if(mp == null)
{
initializeMP()
}
mp.setLooping(false);
mp.start();
int millisecond=mp.getDuration();
Log.e("Song is playing", "in Mediya Player " + millisecond);
prefsEdit.putBoolean("mediaplaying", true);
prefsEdit.commit();
//btnChapter.setEnabled(false);
return null;
}
protected void onPostExecute(Void result)
{
super.onPostExecute(result);
btnChapter.setEnabled(false);
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Configuration config=getResources().getConfiguration();
if(config.orientation == Configuration.ORIENTATION_PORTRAIT)
{
setContentView(R.layout.audio);
}
else if(config.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
setContentView(R.layout.audio);
}
}
@Override
public void onPause() {
super.onPause();
SharedPreferences.Editor prefsEdit = prefs.edit();
boolean isPlaying = prefs.getBoolean("mediaplaying", false);
if (isPlaying)
{
if(mp!=null)
{
mp.pause();
}
int position = mp.getCurrentPosition();
Log.e("Current ", "Position -> " + position);
prefsEdit.putInt("mediaPosition", position);
prefsEdit.commit();
}
}
@Override
protected void onResume() {
super.onResume();
if(mp == null)
{
initializeMP();
}
mp.start();
boolean isPlaying = prefs.getBoolean("mediaplaying", false);
if (isPlaying) {
int position = prefs.getInt("mediaPosition", 0);
mp.seekTo(position);
// mp.start();
}
}
}