web-dev-qa-db-fra.com

Contrôle du lecteur de musique dans la notification

comment définir une notification avec lecture/pause, bouton suivant et précédent dans Android.!

Je suis nouveau avec Android et aussi au débordement de pile. Alors, soyez indulgent avec moi.

enter image description here

J'ai défini une notification lorsque la chanson commence à jouer comme ci-dessous:

"

@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);        
}

"

J'ai créé BroadcastReceiver comme ci-dessous: `

   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 {
        }
    }

}`

Maintenant, j'ai défini la notification personnalisée avec succès, mais comment puis-je gérer les boutons de notification et ses événements tels que lecture/pause, précédent et suivant ... etc. J'essaie également d'utiliser le récepteur de diffusion mais je n'ai pas pu obtenir de réponse.

À la recherche de solutions et de conseils d'experts, veuillez m'aider.

Merci d'avance.

28
Dhaval Travadi

Vous devez définir un custom intent action, Pas la classe de composants AudioPlayerBroadcastReceiver.

Créer une intention avec un nom d'action personnalisé comme celui-ci

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

Ensuite, enregistrez le récepteur PendingIntentBroadcast

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

Ensuite, définissez un onClick pour le contrôle de lecture, effectuez une action personnalisée similaire pour les autres contrôles si nécessaire.

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

Ensuite, enregistrez l'action personnalisée dans AudioPlayerBroadcastReceiver comme ceci

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

Enfin, lorsque le jeu est cliqué sur NotificationRemoteViews layout, vous recevrez le play action Par le 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;
    }
   }
}

EDIT: comment définir le filtre d'intention pour le récepteur de diffusion enregistré dans le code

Vous pouvez également définir le Custom Action À Intent filter À partir du code du Broadcast receiver Enregistré comme ceci

    // 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