Stack Overflow en español Asked by Carlos Daniel Zárate Ramírez on November 7, 2021
Tengo lo siguiente para crear una notificación en Android, mi duda es si en el .addAction, en lugar de iniciar un servicio, puedo ejecutar una función y renombrar el botón.
Por ejemplo al dar click en "Activar", ejecute una función llamada miFuncion() y cambie de texto a "Desactivar" y viceversa.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, activity2.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
Intent servicioIntent = new Intent(this,MiServicio.class);
PendingIntent actionIntent = PendingIntent.getService(this,0,servicioIntent,0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "ID")
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("Titulo")
.setContentText("Contenido")
.setContentIntent(pendingIntent)
.addAction(R.mipmap.ic_launcher,"Activar",actionIntent)//Aquí en lugar de pasar un servicio pasar miFuncion()
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
NotificationCompat.Builder builder = notificacion();
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(1, builder.build());
}
private void miFuncion(option){
//Ejecutar cada vez que doy click en boton creado en notificación
if(option=="activar"){
//Codigo a ejecutar
}
if(option=="desactivar"){
//Codigo a ejecutar
}
}
Para ejecutar miFuncion()
cuando se presione el botón puedes utilizar un BroadcastReceiver
.
En el Manifest
declaras el receiver
:
<receiver android:name=".Receiver">
<intent-filter>
<action android:name="android.intent.action.ACTIVAR" />
</intent-filter>
</receiver>
Luego en el método onCreate()
en lugar de pasar el Servicio pasas el BroadcastReceiver
Intent intent = new Intent("android.intent.action.ACTIVAR");
PendingIntent actionIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
builder.addAction(R.mipmap.ic_launcher, "Activar", actionIntent);
Entonces en la clase Receiver
en el método onReceiver()
para cambiar el texto del botón de ACTIVAR
a DESACTIVAR
y viceversa puedes volver a lanzar la notificación
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
miFucion();
String action = "DESACTIVAR";
PendingIntent actionIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
NotificationCompat.Builder builder = NotificationCompat.Builder(context)
...
...
builder.addAction(R.mipmap.ic_launcher, action, pendingIntent)
...
...
}
private void miFucion(){
}
}
Para alternar el texto del botón de ACTIVAR
a DESACTIVAR
busqué un forma, como utlizar putExtra()
en onCreate()
y getStringExtra()
en el receiver pero no funcionó. La única forma que se me ocurre es utilizar SharedPreferences
, pero si se te ocurre una mejor solución compártela con nosotros
Answered by Ariel Eliezer on November 7, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP