0

J'ai un MediaPlayerService, actuellement démarré lorsque l'on clique sur le bouton Lecture/Pause sur un élément ListView. Voir le code ci-dessous (CustomListAdapter):ANDROID - Créer une notification avec Media Controls au démarrage du service

Intent intent = new Intent(v.getContext(),MediaPlayerService.class); 
intent.putExtra("StreamLink",audio); 
activity.startService(intent); 

Lorsque ce service est démarré par le code ci-dessus, je veux créer une notification avec un bouton Play/Stop. L'utilisateur devrait être en mesure de sortir de l'application, être en mesure d'arrêter Media Playback, par exemple. player.stop() et lancez player.start(). En outre, lorsque l'utilisateur clique sur Notification, il doit renvoyer l'utilisateur à MainActivity.

Le code pour mes MediaPlayerService.java:

public class MediaPlayerService extends Service implements MediaPlayer.OnPreparedListener { 

MediaPlayer mMediaPlayer = null; 
public String audioStreamLink; 

public int onStartCommand(Intent intent, int flags, int startId) { 

    // Get the Audio Streaming Link from the parsed JSON in the Main Activity 
    audioStreamLink = intent.getStringExtra("StreamLink"); 

    // Instantiate MediaPlayer, set the Audio Type and acquire a wakelock, set the Media Player Data Source and Prepare. 
    mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); 
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    try { 
     mMediaPlayer.setDataSource(audioStreamLink); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mMediaPlayer.setOnPreparedListener(this); 
    mMediaPlayer.prepareAsync(); 

    return START_STICKY; 

} 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

/** Called when MediaPlayer is ready */ 
@Override 
public void onPrepared(MediaPlayer player) { 
    player.start(); 
} 

@Override 
public void onDestroy() { 
    mMediaPlayer.stop(); 
    mMediaPlayer.reset(); 
    if (mMediaPlayer != null) mMediaPlayer.release(); 

} 
} 

Répondre

0

Le processus d'obtention d'une notification est complètement documenté là-bas dans les documents, par exemple, see this.

Pour vous aider à passer par toute cette énorme documentation ce sont les points:

  • Vous devez créer la notification personnalisée à l'aide d'un NotificationCompat.Builder
  • Un service de lecteur de musique typique commencerait la notification à l'aide startForeground()
  • Pour ajouter des boutons cliquables à la notification, utilisez addAction() lors de la création des notifications.
  • Les actions dans les notifications sont définies par PendingIntent, c'est une sorte de Intent normal quand il s'agit de répondre.
  • Lorsqu'un bouton sur la notification est cliqué, le onStartCommand() est déclenché avec l'intention que vous avez spécifiée pour ce bouton (si vous configurez l'intention correctement).
  • L'intention de chaque bouton doit avoir un action différent afin que vous puissiez identifier l'intention quand il est reçu.
  • À l'intérieur du onStartCommand(), vous pouvez lire/mettre en pause et effectuer d'autres opérations en fonction de l'action de cette intention.

Certains référence, je vous suggère de lire:

Les choses auraient été un peu différent si vous utilisez un MediaSession à jouer les médias.