Android 当我按下后退键时,音乐就会停止
我已经创建了一个流音乐播放器。但是我的应用程序有一些小问题 当我播放音乐并按“上一步”时,音乐会停止。请告诉我此问题的解决方案,我还有一个问题。请告诉我当歌曲结束时我该怎么做。它不会自动播放下一首歌曲。当歌曲结束后,我试图播放下一首歌曲,然后应用程序停止。这是我的密码Android 当我按下后退键时,音乐就会停止,android,Android,我已经创建了一个流音乐播放器。但是我的应用程序有一些小问题 当我播放音乐并按“上一步”时,音乐会停止。请告诉我此问题的解决方案,我还有一个问题。请告诉我当歌曲结束时我该怎么做。它不会自动播放下一首歌曲。当歌曲结束后,我试图播放下一首歌曲,然后应用程序停止。这是我的密码 public void get() { seekBarProgress.setMax(99); // It means 100% .0-99 seekBarProgress.setOnTouchListener
public void get()
{
seekBarProgress.setMax(99); // It means 100% .0-99
seekBarProgress.setOnTouchListener(this);
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//getting the upload
Upload upload = uploadList.get(i);
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
mMediaPlayer.reset();
seekBarProgress.setProgress(0);
}
try {
mMediaPlayer.setDataSource(upload.getUrl());
mMediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
private void primarySeekBarProgressUpdater() {
seekBarProgress.setProgress((int)(((float)mMediaPlayer.getCurrentPosition()/mediaFileLengthInMilliseconds)*100));
if (mMediaPlayer.isPlaying()) {
Runnable notification = new Runnable() {
public void run() {
primarySeekBarProgressUpdater();
}
};
handler.postDelayed(notification,1000);
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if(v.getId() == R.id.length){
if(mMediaPlayer.isPlaying()){
SeekBar sb = (SeekBar)v;
int playPositionInMillisecconds = (mediaFileLengthInMilliseconds
/ 100) * sb.getProgress();
mMediaPlayer.seekTo(playPositionInMillisecconds);
}
}
return false;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
seekBarProgress.setSecondaryProgress(percent);
}
@Override
public void onCompletion(MediaPlayer mp) {
// Help me also here
}
private void togglePlayPause() {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
mPlayerControl.setImageResource(R.drawable.ic_play);
} else {
mMediaPlayer.start();
mPlayerControl.setImageResource(R.drawable.ic_pause);
mediaFileLengthInMilliseconds = mMediaPlayer.getDuration();
primarySeekBarProgressUpdater();
mSelectedTrackImage.setImageResource(R.drawable.images);
}
}
public void get()
{
seekBarProgress.setMax(99);//表示100%。0-99
seekBarProgress.setOnTouchListener(这个);
mmediplayer.setOnBufferingUpdateListener(此);
mmediplayer.setOnCompletionListener(此);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
//获取上传
Upload Upload=uploadList.get(i);
if(mmediplayer.isPlaying()){
mmediplayer.stop();
mmediplayer.reset();
seekBarProgress.setProgress(0);
}
试一试{
mmediplayer.setDataSource(upload.getUrl());
mMediaPlayer.prepareAsync();
}捕获(IOE异常){
e、 printStackTrace();
}
}
});
}
私有void primarysekbarprogressupdater(){
请参阅kbarprogress.setProgress((int)((float)mMediaPlayer.getCurrentPosition()/mediaFileLengthInMilliseconds)*100);
if(mmediplayer.isPlaying()){
Runnable通知=新的Runnable(){
公开募捐{
primarySeekBarProgressUpdater();
}
};
handler.postDelayed(通知,1000);
}
}
@凌驾
公共布尔onTouch(视图v,运动事件){
if(v.getId()==R.id.length){
if(mmediplayer.isPlaying()){
SeekBar sb=(SeekBar)v;
int PLAYPOSITIONIN毫秒=(MediaFileLengthin毫秒
/100)*某人取得进展();
mmediplayer.seekTo(播放位置毫秒);
}
}
返回false;
}
@凌驾
public void onBufferingUpdate(MediaPlayer mp,整数百分比){
参见kBarProgress.setSecondaryProgress(百分比);
}
@凌驾
完成时的公共作废(MediaPlayer mp){
//在这里也帮我
}
私有无效切换PlayPause(){
if(mmediplayer.isPlaying()){
暂停();
mPlayerControl.setImageResource(R.drawable.ic_play);
}否则{
mmediplayer.start();
mPlayerControl.setImageResource(R.drawable.ic_pause);
mediaFileLengthInMilliseconds=mMediaPlayer.getDuration();
primarySeekBarProgressUpdater();
mSelectedTrackImage.setImageResource(R.drawable.images);
}
}
如果有人知道,请帮助我。您的播放器代码在活动中执行,当按下后退按钮时,活动进入后台,播放停止 正确的解决方案是创建一个Android服务,简而言之:
public class PlayerService extends Service implements AudioManager.OnAudioFocusChangeListener {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String action = intent.getAction();
if (PLAY.equals(action))
play()
...
}
在androidManifest中注册它:
<service
android:name=".PlayerService"
android:exported="false" >
</service>
有关创建服务的信息,请参阅本文:
在回答第二个问题时,您对overrideonCompletion
方法的想法是正确的。
与往常一样,它应该是这样的(在伪代码中):
您可以在这里查看全文示例:请使用服务,而不是使用音乐播放器课程的活动
@Override
public void onCreate() {
super.onCreate();
startService(new Intent(this, PlayerService.class));
bindService(new Intent(this, PlayerService.class), mConnection, Context.BIND_AUTO_CREATE);
}
@Override
public void onCompletion(MediaPlayer mp) {
if (isRepeat) {
play(current);
} else if (isShuffle) {
play(random);
} else {
play(next);
}
}
public void play(index or file or stream){
mp.reset();
mp.setDataSource(get by index or file or stream);
mp.prepare();
mp.start();
}