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.
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.
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 PendingIntent
Broadcast
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 Notification
RemoteViews
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);