Как воспроизводить звук непрерывно во время изменения ориентации в Android
Я разработал приложение, такое как медиаплеер, чтобы использовать его для воспроизведения аудиофайла из источника, но возникает проблема, когда я изменяю книжную ориентацию на кнопку пейзажа, а другой виджет не работает, а другой - когда я снова меняю альбомную ориентацию на портретную, так что та же самая проблема и кнопка панель поиска не работает
мой код здесь
public class Aarati_Activity extends Fragment
{
private ImageButton btnplay;
private SeekBar seekbar;
MediaPlayer mp;
private ImageButton btnstop;
private int finalTime = 0;
private int startTime = 0;
private int oneTimeOnly = 0;
Handler handler=new Handler();
public Aarati_Activity() {}
int audiocurrent;
int audiomax;
private int mp_progress;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_aarti_fragment, container, false);
btnplay=(ImageButton)v.findViewById(R.id.btnplay);
btnstop=(ImageButton)v.findViewById(R.id.btnstop);
seekbar=(SeekBar)v.findViewById(R.id.seekbar);
seekbar.setClickable(true);
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
seekchange();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
});
mp = MediaPlayer.create(getActivity(), R.raw.arti);
audiomax=mp.getDuration();
audiocurrent=mp.getCurrentPosition();
btnstop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mp.isPlaying())
{
mp.stop();
Toast.makeText(getActivity(), "Stop",Toast.LENGTH_LONG).show();
btnplay.setImageResource(R.drawable.ic_action_play);
try
{
mp.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
Toast.makeText(getActivity(),"Aarti Currently not playing",Toast.LENGTH_SHORT).show();
}
}
});
btnplay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mp.isPlaying())
{
mp.pause();
btnplay.setImageResource(R.drawable.ic_action_play);
Toast.makeText(getActivity(), "Pause",Toast.LENGTH_SHORT).show();
finalTime = mp.getDuration();
startTime = mp.getCurrentPosition();
if(oneTimeOnly == 0)
{
seekbar.setMax((int) finalTime);
oneTimeOnly = 1;
}
seekbar.setProgress((int)startTime);
handler.postDelayed(UpdateSongTime,100);
}
else
{ btnplay.setImageResource(R.drawable.ic_action_pause);
mp.start();
Toast.makeText(getActivity(), "Play",Toast.LENGTH_SHORT).show();
finalTime = mp.getDuration();
startTime = mp.getCurrentPosition();
if(oneTimeOnly == 0)
{
seekbar.setMax((int) finalTime);
oneTimeOnly = 1;
}
seekbar.setProgress((int)startTime);
handler.postDelayed(UpdateSongTime,100);
}
}
});
return v;
}
@SuppressLint("NewApi")
public void seekchange()
{
mp_progress=seekbar.getProgress();
mp.seekTo(mp_progress);
}
private Runnable UpdateSongTime = new Runnable()
{
public void run()
{
startTime = mp.getCurrentPosition();
seekbar.setProgress((int)startTime);
handler.postDelayed(this, 100);
}
};
}
2 ответа
Вы должны использовать Сервис для воспроизведения песни. Это позволит вам играть песню, даже если приложение находится в фоновом режиме.
По сути, с точки зрения MVC (Model-View-Controller) Activity - это Controller, иерархия представлений - это View, а View и Controller воссоздаются при каждом изменении ориентации. Между тем, воспроизведение песни принадлежит модели.
Обратите внимание, что у действия есть методы onSaveInstanceState(Bundle) и onCreate (Bundle), и если пакет, переданный в onCreate(), не равен NULL, он содержит информацию, ранее сохраненную в onSaveInstanceState (). И есть также onRetainNonConfigurationInstance (). Когда экран переворачивается, старое действие уничтожается и создается новое действие, и эти методы позволяют старому действию передавать важные данные новому.
Даже после того, как вы создадите сервис, вы должны помнить об этом MVC.