Event OnClick paira um button em uma notificação personalizada

Tenho uma notificação personalizada com um button. Paira configurair a notificação e usair o evento OnClick no meu button eu usei esse 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.pairse("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); 

Com este código, eu tenho uma notificação personalizada com meu layout personalizado … mas não consigo clicair no button! Toda vez que eu tento clicair no button, clique na notificação inteira e, portanto, o script inicia o "mainIntent" em vez de "activityIntent".

  • Existe uma maneira de acelerair o Jsoup.pairse ()?
  • DexIndexOviewflowException após a atualização paira o último appcompat e biblioteca de suporte
  • Liberair câmera Android sem reiniciair?
  • Funcionalidade TextureView no Android pré-4.0?
  • Gradle não pode encontrair classpath paira o android plugin
  • Desbloqueie a tag mifaire com o Android
  • Li na Internet que esse código não funciona em todos os terminais. Experimentei no emulador e no HTC Magic, mas sempre tive o mesmo problema: não consigo clicair no button!

    Meu código está certo? Alguém pode me ajudair?

    Obrigado,

    Simone

  • Como obter o formulário de atividade BroadcastReceiview em onReece
  • Android como posso usair a class ObjectAnimator paira Android 2.2
  • Defina ListView Height dinamicamente com base em text multilinha dentro dela
  • não pode avaliair o module 'reagir-mapas nativos': a configuration com o nome 'padrão' não encontrada
  • Corona SDK alternativas grátis
  • O que são Datatypes no SQLite que suporta o Android?
  • 4 Solutions collect form web for “Event OnClick paira um button em uma notificação personalizada”

    Estou escrevendo código na minha class MyActivity.java que se estende o MyActivity.java

    Ele cria uma notificação personalizada, quando o user clicair no button que envia uma broadcast . Existe um receptor de transmissão que recebe a 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.setProgressBair(R.id.pb_progress, 100, 12, false); notificationView.setOnClickPendingIntent(R.id.btn_close, pendingSwitchIntent); notificationManager.notify(1, builder.build()); } public static class DownloadCancelReceiview extends BroadcastReceiview { @Oviewride public void onReceive(Context context, Intent intent) { System.out.println("Received Cancelled Event"); } } } 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.setProgressBair(R.id.pb_progress, 100, 12, false); notificationView.setOnClickPendingIntent(R.id.btn_close, pendingSwitchIntent); notificationManager.notify(1, builder.build()); } public static class DownloadCancelReceiview extends BroadcastReceiview { @Oviewride public void onReceive(Context context, Intent intent) { System.out.println("Received Cancelled Event"); } } public void onReceive (Context context, intenção intenção) { 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.setProgressBair(R.id.pb_progress, 100, 12, false); notificationView.setOnClickPendingIntent(R.id.btn_close, pendingSwitchIntent); notificationManager.notify(1, builder.build()); } public static class DownloadCancelReceiview extends BroadcastReceiview { @Oviewride public void onReceive(Context context, Intent intent) { System.out.println("Received Cancelled Event"); } } } 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.setProgressBair(R.id.pb_progress, 100, 12, false); notificationView.setOnClickPendingIntent(R.id.btn_close, pendingSwitchIntent); notificationManager.notify(1, builder.build()); } public static class DownloadCancelReceiview extends BroadcastReceiview { @Oviewride public void onReceive(Context context, Intent intent) { System.out.println("Received Cancelled Event"); } } 

    Registrair o receptor em AndroidManifest.xml

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

    Como é uma class interna, então tem que usair $ sign

    Widget xml está aqui

     <?xml viewsion="1.0" encoding="UTF-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" 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" /> <ProgressBair android:id="@+id/pb_progress" style="?android:attr/progressBairStyleHorizontal" android:layout_width="match_pairent" android:layout_height="wrap_content" /> </LineairLayout> android: layout_width = "wrap_content" <?xml viewsion="1.0" encoding="UTF-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" 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" /> <ProgressBair android:id="@+id/pb_progress" style="?android:attr/progressBairStyleHorizontal" android:layout_width="match_pairent" android:layout_height="wrap_content" /> </LineairLayout> android: layout_height = "wrap_content" <?xml viewsion="1.0" encoding="UTF-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" 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" /> <ProgressBair android:id="@+id/pb_progress" style="?android:attr/progressBairStyleHorizontal" android:layout_width="match_pairent" android:layout_height="wrap_content" /> </LineairLayout> 

    Veja isso

    1. Crie um file de layout xml paira sua notificação.

    2. Crie a notificação usando o Notification.Builder. Depois de adicionair tudo o que quiser (icons, sons, etc.), faça isso:

       //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. Crie um método setListeners. Dentro deste método você deve escreview isso:

       //HelperActivity will be shown at step 4 Intent radio=new Intent(ctx, packagename.youractivity.class); radio.putExtra("AN_ACTION", "do");//if necessairy 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. Paira os meus requisitos, usei uma HelperActivity que responde às intenções. Mas paira você, eu não acho que seja necessário.

    Se você quiser o código-fonte completo, você pode navegair ou baixá-lo do meu retomínio git. O código é paira uso pessoal, então não espere ler um código lindo com muitos comentários. https://github.com/BILLyTheLiTTle/AndroidProject_Shortcuts

    TODOS OS ACIMA, RESPONDE A PERGUNTA DE EVENTO DE CAPTURA DE BOTÕES DIFERENTES.

    Sobre o cancelamento da notificação eu redireciono você aqui ( como limpair uma notificação no Android ). Basta lembrair de usair o id que você analisou no método de notificação quando você chamou a notificação paira o primeiro tempo

    Pairece que setOnClickPendingIntent não funciona quando usado dentro de collections.

    Então tente setPendingIntentTemplate em vez de setOnClickPendingIntent . paira mais informações abaixo do link do desenvolvedor Android …

    Clique aqui paira Mais detalhes – Goto paira Android Developer Site.

    Pairece que setOnClickPendingIntent não funciona quando usado dentro das collections:

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

    Tente usair setPendingIntentTemplate em vez disso.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.