studio - notificaciones push android firebase
Cómo utilizar Acciones desde Notificación sin iniciar Actividad (1)
Así que estoy trabajando en un reproductor de música simple. El reproductor de música como su nombre indica, puede reproducir una canción, pausar la reproducción, avanzar a la siguiente canción, volver a la canción anterior y detener la reproducción completamente. Cuando reproduzca una canción, aparecerá una notificación con el nombre del artista y el nombre de la canción; esta notificación también tiene tres botones (Acciones): Detener, Pausar un Siguiente.
Con lo que estoy teniendo problemas es asegurarme de que cuando se haga clic en cualquiera de las acciones, se active el control de reproducción relacionado con la Acción, y bueno, no tengo la menor idea de cómo hacerlo. Busqué en la Notificación de Android: http://developer.android.com/guide/topics/ui/notifiers/notifications.html pero no aclara ni dedica demasiada información a las Acciones de notificación.
Aquí hay una acción simple, por ejemplo (que debe estar asociada con el botón "Siguiente", haga clic en la notificación: Nota: todo el código que se describe a continuación está escrito en el siguiente paquete: com.deadpixels.light.player y la actividad se llama : PlayerActivity
public void nextSong() {
if (position == songs.size() -1) {
Toast.makeText(this, "No more songs on queue", Toast.LENGTH_SHORT).show();
if(mPlayer.isPlaying()) {
return;
}
else {
buttonPlay.setImageResource(R.drawable.button_play);
}
return;
}
else {
position++;
playSong(songs.get(position));
}
}
Esto es lo que traté de hacer:
Intent nextIntent = new Intent(KEY_NEXT);
PendingIntent nextPendingIntent = createPendingResult(0, nextIntent, 0);
Donde la acción para el NextIntent es:
public static final String KEY_NEXT = "com.deadpixels.light.player.PlayerActivity.nextSong";
y luego agrego eso a la Notificación mediante addAction ():
mBuilder.addAction(R.drawable.not_action_next, "Next", nextPendingIntent);
¿Saben qué otra cosa podría intentar? El uso de lo que expliqué anteriormente no hace nada en absoluto, aparece la notificación y tiene tres botones de acción, pero hacer clic en ellos no hace nada por mí.
En un momento pensé que tal vez si añadía los filtros de intención con los nombres de acción, pero luego pensé, bueno, todos están en el mismo espacio de nombres, ¿por qué debería hacerlo?
He resuelto este problema utilizando difusiones. Por ejemplo, para enviar una transmisión que avance a la siguiente canción, puede usar lo siguiente:
Intent nextIntent = new Intent(KEY_NEXT);
PendingIntent nextPendingIntent = PendingIntent.getBroadcast(this, 0, nextIntent, 0);
Luego, registre un BroadcastReceiver
dentro de su Activity
:
IntentFilter filter = new IntentFilter();
filter.addAction(KEY_NEXT);
// Add other actions as needed
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(KEY_NEXT)) {
nextSong();
} else if (...) {
...
}
...
}
}
registerReceiver(receiver, filter);
Si está utilizando un servicio para administrar la reproducción en segundo plano, entonces querrá registrar BroadcastReceiver
en el servicio en lugar de la actividad. Asegúrese de almacenar la instancia del receiver
algún lugar para que pueda cancelar su registro cuando se cierre la actividad o el servicio.