这是一个播放音频文件的简单应用程序。一切正常,但是当我按下停止按钮或搜索栏到达终点时,我遇到了一个问题
注意:在将搜索栏连接到Media Player之前,一切正常
这是我的代码:
public class SongActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer = null;
private SongInfo song;
private AudioManager mAudioManager;
private int AudioFocusRequest;
private int ProgressValue;
private SeekBar seekBar;
private Handler mSeekbarUpdateHandler = new Handler();
// AudioManager Focus change Listener ---------------------------------------------------------------------------------------
private AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
mediaPlayer.start();
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
mediaPlayer.pause();
releaseMediaplayer();
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK || focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
mediaPlayer.pause();
}
}
};
// SeekBar Change Listener ------------------------------------------------------------------------------------------------
private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
ProgressValue = progress;
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
if (mediaPlayer != null) {
mediaPlayer.pause();
}
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if (mediaPlayer != null) {
mediaPlayer.seekTo(ProgressValue);
} else {
Toast.makeText(SongActivity.this, "اختار السوره اولا ", Toast.LENGTH_SHORT).show();
}
}
};
//seekBar handler-------------------------------------------------------------------------------
private Runnable mUpdateSeekbar = new Runnable() {
@Override
public void run() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
mSeekbarUpdateHandler.postDelayed(this, 50);
}
};
//----------------------------------------------------------------------------------------------------------------------------------
@Override
protected void onStop() {
super.onStop();
releaseMediaplayer();
}
@Override
protected void onPause() {
super.onPause();
mediaPlayer.pause();
}
// MediaPlayer On completion Listener ----------------------------------------------------------------------------------------------
private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(SongActivity.this, " السوره انتهت ", Toast.LENGTH_SHORT).show();
releaseMediaplayer();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
seekBar = (SeekBar) findViewById(R.id.seek_bar);
seekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);
final ArrayList<SongInfo> songList = new ArrayList<SongInfo>();
songList.add(new SongInfo("الفاتحه", "مشارى العفاسى", R.raw.fatha));
songList.add(new SongInfo("العصر", "مشارى العفاسى", R.raw.elasr));
songList.add(new SongInfo("الاخلاص", "مشارى العفاسى", R.raw.elekhlas));
songList.add(new SongInfo("الفلق", "مشارى العفاسى", R.raw.elfalaq));
songList.add(new SongInfo("الفيل", "مشارى العفاسى", R.raw.elfel));
songList.add(new SongInfo("الهمزه", "مشارى العفاسى", R.raw.elhamza));
songList.add(new SongInfo("الكافرون", "مشارى العفاسى", R.raw.elkaferon));
songList.add(new SongInfo("الكوثر", "مشارى العفاسى", R.raw.elkawsr));
songList.add(new SongInfo("قريش", "مشارى العفاسى", R.raw.qurish));
songList.add(new SongInfo("المسد", "مشارى العفاسى", R.raw.elmasad));
songList.add(new SongInfo("الماعون", "مشارى العفاسى", R.raw.elmaaon));
songList.add(new SongInfo("الناس", "مشارى العفاسى", R.raw.elnas));
songList.add(new SongInfo("النصر", "مشارى العفاسى", R.raw.elnasr));
ListView listView = (ListView) findViewById(R.id.list_view);
SongAdapter songAdapter = new SongAdapter(SongActivity.this, songList);
listView.setAdapter(songAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
song = songList.get(position);
AudioFocusRequest = mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
if (AudioFocusRequest == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
releaseMediaplayer();
mediaPlayer = MediaPlayer.create(SongActivity.this, song.getSongResource());
seekBar.setMax(mediaPlayer.getDuration());
mSeekbarUpdateHandler.postDelayed(mUpdateSeekbar,0);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(onCompletionListener);
}
}
});
Button startButton = (Button) findViewById(R.id.start_button);
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AudioFocusRequest = mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
if (AudioFocusRequest == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
if (mediaPlayer != null) {
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(onCompletionListener);
} else {
/*mediaPlayer = MediaPlayer.create(SongActivity.this, R.raw.fatha);
seekBar.setMax(mediaPlayer.getDuration());
mSeekbarUpdateHandler.postDelayed(mUpdateSeekbar,0);
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(onCompletionListener);*/
Toast.makeText(SongActivity.this, "لتشغيل السوره التى تريدها اضغط عليها ", Toast.LENGTH_SHORT).show();
}
}
}
});
Button pauseButton = (Button) findViewById(R.id.pause_button);
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer != null) {
mediaPlayer.pause();
}
}
});
Button stopButton = (Button) findViewById(R.id.stop_button);
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer != null) {
mSeekbarUpdateHandler.removeCallbacks(mUpdateSeekbar);
releaseMediaplayer();
}
}
});
}
private void releaseMediaplayer() {
if (mediaPlayer != null) {
mediaPlayer.pause();
mediaPlayer.release();
mAudioManager.abandonAudioFocus(onAudioFocusChangeListener);
}
}
}