1

Я пытаюсь создать музыкальный проигрыватель, в котором медиа-плеер подключен к службе, а уведомление в фоновом режиме поддерживает воспроизведение.Действие не восстанавливается после нажатия панели уведомлений

Но когда я нажимаю на уведомление, он создает новый экземпляр действия, а не восстанавливает его.

Вот мои коды, Пожалуйста, проверьте их: -

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.player); 


    MusicService.mPlayer = new MediaPlayer(); 
     MusicService.mPlayer.setOnCompletionListener(this); // Important 


startService(Explicit(getApplicationContext(),new Intent(MusicService.ACTION_SETUP))); 
playSong(currentSongIndex); 

} 
public static void playSong(int songIndex){ 
      MusicService.mPlayer.reset(); 
        MusicService.mPlayer.setDataSource(getPathForsongname(Playlist.get(songIndex))); 
        MusicService.mPlayer.prepare(); 
        MusicService.mPlayer.start(); 


       songTitle = Playlist.get(songIndex); 
       songTitleLabel.setText(songTitle); 
       songArtistLabel.setText(getArtistForsongname(songTitle)); 
       songProgressBar.setProgress(0); 
       songProgressBar.setMax(100); 

       updateProgressBar();//It updates the progress by using handler progress bar simply 


      } 

     } 

В настоящее время в службе я настройка на переднем плане, как это: -

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     String action = intent.getAction(); 
     if (action.equals(ACTION_SETUP)){ 
     setupAsForeground(AndroidBuildingMusicPlayerActivity.Playlist.get(AndroidBuildingMusicPlayerActivity.currentSongIndex)); 
     } 
    return START_NOT_STICKY; } 

void setUpAsForeground(String text) { 

     stopForeground(true); 
     Intent intent = new Intent(this, AndroidBuildingMusicPlayerActivity.class); 

     PendingIntent pi = PendingIntent.getActivity(this, 1, intent, 0); 
    RemoteViews r = new RemoteViews(this.getPackageName(), 
       R.layout.notification_layout);//set your custom layout 
     Intent nextIntent = new Intent(this, MusicService.class); 
     nextIntent.setAction(ACTION_SKIP); 
     PendingIntent pnextIntent = PendingIntent.getService(this, 0, 
       nextIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     Intent prevIntent = new Intent(this, MusicService.class); 
     prevIntent.setAction(ACTION_PREVIOUS); 

     PendingIntent pprevIntent = PendingIntent.getService(this, 0, 
       prevIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     Intent playIntent = new Intent(this, MusicService.class); 
     playIntent.setAction(ACTION_PLAY); 
     PendingIntent pplayIntent = PendingIntent.getService(this, 0, 
       playIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     mSongTitle=AndroidBuildingMusicPlayerActivity.Playlist.get(AndroidBuildingMusicPlayerActivity.current); 
     artist=AndroidBuildingMusicPlayerActivity.getArtistForsongname(mSongTitle); 
     r.setOnClickPendingIntent(R.id.btnNext, pnextIntent); 
     r.setOnClickPendingIntent(R.id.btnPrevious, pprevIntent); 
     r.setOnClickPendingIntent(R.id.btnPlay, pplayIntent); 
     r.setTextViewText(R.id.songTitle1, mSongTitle); 
     r.setTextViewText(R.id.Artist1, artist); 
     r.setFloat(R.id.songTitle1, "setTextSize", 14); 
     Notification.Builder mBuilder = new Notification.Builder( 
       this) 
     .setSmallIcon(R.drawable.ic_launcher) 
     .setContentTitle(" Music Player") 
     .setContentText(text) 

     .setContent(r) 
     .setContentIntent(pi) 
       .setOngoing(true) 
        .setWhen(0) 

       .setAutoCancel(false); 

     startForeground(1,mBuilder.build()); 
    } 

Но когда я уничтожить деятельность путем удаления его из недавние задачи.

И если вы нажмете на панели уведомлений, он начнет новую деятельность и начнет воспроизведение песни с 0:00.

Есть ли способ возобновить действие с того же состояния? Я пробовал onsaveinstance() и onrestoreinstance(), ничего не работало для меня.

Пожалуйста, предложите мне способ сделать это.

Любая помощь будет оценена ... спасибо юй заранее :)

+1

попробуйте с 'android: launchMode =" singleTask "' в манифесте активности –

+1

Вы сбросите медиаплеер в своей игре playSong (currentSongIndex); 'call. – tachyonflux

+1

Единственная цель вашего сервиса, похоже, заключается в установке уведомления переднего плана, в то время как ваше эфемерное действие отвечает за фактическое управление воспроизведением. Лучшая реализация заключается в перемещении всех реализаций воспроизведения музыки в службу и предоставлении методов, позволяющих вашей Деятельности управлять ею и получать ее статус. – Kai

ответ

3

Создать отложенную намерение, используя следующий код:

PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
+0

пытался, но не работал для меня :( –

1

Вы можете переместить игру() функцию в службе. когда когда-либо вы хотите играть в песню, просто начните работу с требуемых атрибутов, таких как ваша песня uri и т. д.