android - programacion - reproductor de musica con caratulas descargables
Control de reproductor de música en notificación. (1)
cómo configurar la notificación con el botón de reproducción / pausa, siguiente y anterior en Android.
Soy nuevo con Android y también en desbordamiento de pila. Así que por favor tengan paciencia conmigo.
Configuro la notificación cuando la canción comienza a reproducirse como a continuación:
`
@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);
}
`
He creado BroadcastReceiver como a continuación: `
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 {
}
}
}`
Ahora, configuro la notificación personalizada con éxito, pero ¿cómo puedo manejar los botones de notificación y sus eventos como reproducir / pausar, anterior y siguiente ...? También trato de usar el receptor de difusión pero no pude obtener ninguna respuesta.
Buscando la solución y la orientación de los expertos, por favor ayudenme.
Gracias por adelantado.
Debe establecer una custom intent action
, no la clase de componente AudioPlayerBroadcastReceiver
.
Crea una intención con un nombre de acción personalizado como este
Intent switchIntent = new Intent("com.example.app.ACTION_PLAY");
Luego, registre el receptor PendingIntent
Broadcast
PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 100, switchIntent, 0);
Luego, establezca un onClick
para el control de reproducción, realice una acción personalizada similar para otros controles si es necesario.
notificationView.setOnClickPendingIntent(R.id.btn_play_pause_in_notification, pendingSwitchIntent);
A continuación, registre la acción personalizada en AudioPlayerBroadcastReceiver
como este
<receiver android:name="com.example.app.AudioPlayerBroadcastReceiver" >
<intent-filter>
<action android:name="com.example.app.ACTION_PLAY" />
</intent-filter>
</receiver>
Finalmente, cuando se hace clic en el diseño de Notification
RemoteViews
, recibirá la play action
por parte del 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;
}
}
}
EDITAR: cómo configurar el filtro de intento para el receptor de difusión registrado en el código
También puede configurar la Custom Action
través del Intent filter
desde el código del Broadcast receiver
registrado de esta manera
// 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);