Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Evento OnClick para un botón en una notificación personalizada

Tengo una notificación personalizada con un botón. Para configurar la notificación y utilizar el evento OnClick en mi botón He utilizado este código:

//Notification and intent of the notification Notification notification = new Notification(R.drawable.stat_notify_missed_call, "Custom Notification", System.currentTimeMillis()); Intent mainIntent = new Intent(getBaseContext(), NotificationActivity.class); PendingIntent pendingMainIntent = PendingIntent.getActivity(getBaseContext(), 0, mainIntent , 0); notification.contentIntent = pendingMainIntent; //Remoteview and intent for my button RemoteViews notificationView = new RemoteViews(getBaseContext().getPackageName(), R.layout.remote_view_layout); Intent activityIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:190")); PendingIntent pendingLaunchIntent = PendingIntent.getActivity(getBaseContext(), 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT); notificationView.setOnClickPendingIntent(R.id.button1, pendingLaunchIntent); notification.contentView = notificationView; notificationManager.notify(CUSTOM_NOTIFICATION_ID, notification); 

Con este código tengo una notificación personalizada con mi diseño personalizado … pero no puedo hacer clic en el botón! Cada vez que intento hacer clic en el botón, hago clic en la notificación completa y, por lo tanto, el script inicia el "mainIntent" en lugar de "activityIntent".

He leído en Internet que este código no funciona en todos los terminales. Lo he probado en el emulador y en un HTC Magic pero siempre tengo el mismo problema: ¡No puedo hacer clic en el botón!

Mi código es correcto? ¿Puede ayudarme alguien?

Gracias,

Simone

  • Cómo obtener el identificador de elemento en un controlador onItemClick
  • Descartar Snackbar A la izquierda deslizar
  • OnClickListener en pestañas no funciona
  • OnItemClickListener usando ArrayAdapter para ListView
  • Deshabilitar onMarkerClickListener completamente en Google Maps API v2
  • Usando onClick en TextView con texto seleccionable - cómo evitar doble clic?
  • Ocultar el teclado cuando el usuario teclea en cualquier otro lugar de la pantalla en android
  • Android: Cómo propagar el evento de clic a los hijos de LinearLayout y cambiar su drawable
  • 4 Solutions collect form web for “Evento OnClick para un botón en una notificación personalizada”

    Estoy escribiendo código en mi clase MyActivity.java que extiende android.app.Activity

    Crea una notificación personalizada, cuando el usuario hace clic en el botón que envía una broadcast . Hay un receptor de radiodifusión que recibe la broadcast .

     private void createDownloadNotification() { Intent closeButton = new Intent("Download_Cancelled"); closeButton.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 0, closeButton, 0); RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.widget_update_notification); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); NotificationCompat.Builder builder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher).setTicker("Ticker Text").setContent(notificationView); notificationView.setProgressBar(R.id.pb_progress, 100, 12, false); notificationView.setOnClickPendingIntent(R.id.btn_close, pendingSwitchIntent); notificationManager.notify(1, builder.build()); } public static class DownloadCancelReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("Received Cancelled Event"); } } 

    Registrar el receptor en AndroidManifest.xml

     <receiver android:name=".MainActivity$DownloadCancelReceiver" android:exported="false"> <intent-filter> <action android:name="Download_Cancelled" /> </intent-filter> </receiver> 

    Puesto que es clase interna así que tiene que utilizar $ signo

    Widget xml está aquí

     <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="horizontal" > <Button android:id="@+id/btn_close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Close Me" /> <ProgressBar android:id="@+id/pb_progress" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 

    mira esto

    1. Cree un archivo de diseño xml para su notificación.

    2. Cree la notificación utilizando el Notification.Builder. Después de agregar todo lo que desea (iconos, sonidos, etc), haga lo siguiente:

       //R.layout.notification_layout is from step 1 RemoteViews contentView=new RemoteViews(ctx.getPackageName(), R.layout.notification_layout); setListeners(contentView);//look at step 3 notification.contentView = contentView; 
    3. Cree un método setListeners. Dentro de este método usted tiene que escribir esto:

       //HelperActivity will be shown at step 4 Intent radio=new Intent(ctx, packagename.youractivity.class); radio.putExtra("AN_ACTION", "do");//if necessary PendingIntent pRadio = PendingIntent.getActivity(ctx, 0, radio, 0); //R.id.radio is a button from the layout which is created at step 2 view.setOnClickPendingIntent(R.id.radio, pRadio); //Follows exactly my code! Intent volume=new Intent(ctx, tsapalos11598712.bill3050.shortcuts.helper.HelperActivity.class); volume.putExtra("DO", "volume"); //HERE is the whole trick. Look at pVolume. I used 1 instead of 0. PendingIntent pVolume = PendingIntent.getActivity(ctx, 1, volume, 0); view.setOnClickPendingIntent(R.id.volume, pVolume); 
    4. Para mis requisitos he utilizado una HelperActivity que responde a las intenciones. Pero para ti no creo que sea necesario.

    Si quieres el código fuente completo, puedes buscarlo o descargarlo desde mi repo de git. El código es para uso personal, así que no espere leer un código magnífico con muchos comentarios. https://github.com/BILLyTheLiTTle/AndroidProject_Shortcuts

    TODO LO ANTERIOR, RESPONDE A LA CUESTIÓN DEL EVENTO DE CAPTURA DE BOTONES DIFERENTES.

    Acerca de cancelar la notificación te redirijo aquí ( Cómo borrar una notificación en Android ). Sólo recuerde utilizar el ID que analizó en el método de notificación cuando llamó a la notificación por primera vez

    Parece que setOnClickPendingIntent no funciona cuando se utiliza dentro de las colecciones.

    Así que intente setPendingIntentTemplate en lugar de setOnClickPendingIntent . Para más información abajo android developer link …

    Haga clic aquí para obtener más detalles – Ir al sitio para desarrolladores de Android.

    Parece que setOnClickPendingIntent no funciona cuando se utiliza dentro de las colecciones:

    http://developer.android.com/reference/android/widget/RemoteViews.html#setOnClickPendingIntent(int,%20android.app.PendingIntent)

    Intente usar setPendingIntentTemplate en su lugar.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.