webentwicklung-frage-antwort-db.com.de

Musik-Player-Steuerung in Benachrichtigung

so stellen Sie die Benachrichtigung mit Wiedergabe/Pause, nächster und vorheriger Schaltfläche in Android ein.!

Ich bin neu bei Android & auch bei Stack Overflow. Also bitte mit mir aushalten.

enter image description here

Ich stelle die Benachrichtigung ein, wenn der Song wie folgt abgespielt wird:

`

@SuppressLint("NewApi")
public void setNotification(String songName){
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager notificationManager = (NotificationManager) getSystemService(ns);


    @SuppressWarnings("deprecation")
    Notification notification = new Notification(R.drawable.god_img, null, System.currentTimeMillis());

    RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.notification_mediacontroller);

    //the intent that is started when the notification is clicked (works)
    Intent notificationIntent = new Intent(this, AudioBookListActivity.class);
    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    notification.contentView = notificationView;
    notification.contentIntent = pendingNotificationIntent;
    notification.flags |= Notification.FLAG_NO_CLEAR;

    //this is the intent that is supposed to be called when the button is clicked
    Intent switchIntent = new Intent(this, AudioPlayerBroadcastReceiver.class);
    PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 0, switchIntent, 0);

    notificationView.setOnClickPendingIntent(R.id.btn_play_pause_in_notification, pendingSwitchIntent);
    notificationManager.notify(1, notification);        
}

`

Ich habe BroadcastReceiver wie folgt erstellt: `

   private class AudioPlayerBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        System.out.println("intent action = " + action);
        long id = intent.getLongExtra("id", -1);

        if(Constant.PLAY_ALBUM.equals(action)) {
            //playAlbum(id);
        } else if(Constant.QUEUE_ALBUM.equals(action)) {
            //queueAlbum(id);
        } else if(Constant.PLAY_TRACK.equals(action)) {
            //playTrack(id);
        } else if(Constant.QUEUE_TRACK.equals(action)) {
            //queueTrack(id);
        } else if(Constant.PLAY_PAUSE_TRACK.equals(action)) {
 //                playPauseTrack();
            System.out.println("press play");
        } else if(Constant.HIDE_PLAYER.equals(action)) {
 //                hideNotification();
            System.out.println("press next");
        }
        else {
        }
    }

}`

Jetzt habe ich die benutzerdefinierte Benachrichtigung erfolgreich eingerichtet, aber wie kann ich mit Benachrichtigungsschaltflächen und ihren Ereignissen wie Wiedergabe/Pause, Zurück und Weiter umgehen?.

Wenn Sie nach einer Lösung und Anleitung von Experten suchen, helfen Sie mir bitte.

Danke im Voraus.

28
Dhaval Travadi

Sie müssen ein custom intent action, nicht die Komponentenklasse AudioPlayerBroadcastReceiver.

Erstellen Sie eine Absicht mit diesem Namen für eine benutzerdefinierte Aktion

  Intent switchIntent = new Intent("com.example.app.ACTION_PLAY");

Registrieren Sie dann den PendingIntentBroadcast Empfänger

  PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 100, switchIntent, 0);

Legen Sie dann ein onClick für das Wiedergabesteuerelement fest und führen Sie bei Bedarf eine ähnliche benutzerdefinierte Aktion für andere Steuerelemente aus.

  notificationView.setOnClickPendingIntent(R.id.btn_play_pause_in_notification, pendingSwitchIntent);

Registrieren Sie anschließend die benutzerdefinierte Aktion wie folgt in AudioPlayerBroadcastReceiver

   <receiver Android:name="com.example.app.AudioPlayerBroadcastReceiver" >
        <intent-filter>
            <action Android:name="com.example.app.ACTION_PLAY" />
        </intent-filter>
    </receiver>

Wenn Sie schließlich auf das Layout NotificationRemoteViews klicken, erhalten Sie das play action durch den BroadcastReceiver

public class AudioPlayerBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {

    String action = intent.getAction();

    if(action.equalsIgnoreCase("com.example.app.ACTION_PLAY")){
        // do your stuff to play action;
    }
   }
}

BEARBEITEN: Einstellen des Vorsatzfilters für den im Code registrierten Rundfunkempfänger

Sie können auch das Custom Action durch Intent filter vom Code für den registrierten Broadcast receiver so was

    // instance of custom broadcast receiver
    CustomReceiver broadcastReceiver = new CustomReceiver();

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
    // set the custom action
    intentFilter.addAction("com.example.app.ACTION_PLAY");
    // register the receiver
    registerReceiver(broadcastReceiver, intentFilter); 
34
Libin