Postaram się zapewnić rozwiązanie, z którego korzystałem, a większość odtwarzaczy muzyki również używa tej samej techniki do wyświetlania kontrolek odtwarzacza na pasku powiadomień.
Prowadzę usługę, która służy do zarządzania odtwarzaczem multimedialnym i wszystkimi jego kontrolkami. Kontrola użytkownika działania współdziała z usługą, na przykład wysyłając intencje do usługi
Intent i = new Intent(MainActivity.this, MyRadioService.class);
i.setAction(Constants.Player.ACTION_PAUSE);
startService(i);
Aby odebrać intencje i wykonać akcję w klasie Service używam następującego kodu w metodzie Service onStartCommand
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.getAction().equals(Constants.Player.ACTION_PAUSE)) {
if(mediaPlayer.isPlaying()) {
pauseAudio();
}
}
Teraz do dokładnej odpowiedzi na twoje pytanie, aby pokazać powiadomienie z kontrolkami odtwarzania. Możesz wywołać następujące metody, aby wyświetlić powiadomienie z kontrolkami.
private void startAppInForeground() {
RemoteViews views = new RemoteViews(getPackageName(),
R.layout.notification_status_bar);
Intent playIntent = new Intent(this, MyRadioService.class);
playIntent.setAction(Constants.Player.ACTION_PLAY);
PendingIntent pplayIntent = PendingIntent.getService(this, 0,
playIntent, 0);
views.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent);
views.setImageViewResource(R.id.status_bar_play,
R.drawable.status_bg);
Notification status = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
status = new Notification.Builder(this).build();
}
status.flags = Notification.FLAG_ONGOING_EVENT;
status.icon = R.mipmap.ic_launcher;
status.contentIntent = pendingIntent;
startForeground(Constants.FOREGROUND_SERVICE, status);
} Mam nadzieję, że to naprawdę ci pomoże. I będziesz w stanie osiągnąć to, co chcesz. Miłego kodowania :)