TransWikia.com

Cambiar texto de Boton de acción de una notificacion Android, Java y añadir una función a ese boton

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
    }

            
    }

One Answer

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP