事件OnClick在自定义通知中的button

我有一个button的自定义通知。 要设置通知并使用我的button上的事件OnClick我已经使用此代码:

//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); 

有了这个代码,我用我的自定义布局的自定义通知…但我不能点击button! 每次我尝试点击button,我点击整个通知,所以脚本启动“mainIntent”,而不是“activityIntent”。

我已经在互联网上看到,这个代码不适用于所有的terminal。 我已经在模拟器和macros达魔术上尝试过,但我总是有同样的问题:我不能点击button!

我的代码是正确的? 有人可以帮助我吗?

谢谢,

西蒙娜

Related of "事件OnClick在自定义通知中的button"

我在扩展android.app.Activity MyActivity.java类中编写代码

它创build一个自定义的通知,当用户点击button发送broadcast 。 有一个接收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"); } } 

AndroidManifest.xml注册接收者

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

既然是内部类,所以必须使用$符号

小部件xml在这里

 <?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> 

看一下这个

  1. 为您的通知创build一个xml布局文件。

  2. 使用Notification.Builder创build通知。 添加所有你想要的东西(图标,声音等)之后,请执行以下操作:

     //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. 创build一个方法setListeners。 在这个方法里面,你必须写下这个:

     //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. 对于我的要求,我使用了一个HelperActivity来响应意图。 但对于你我不认为这是必要的。

如果你想要完整的源代码,你可以浏览它或从我的git仓库下载。 该代码是个人使用,所以不要指望阅读很多评论的华丽的代码。 https://github.com/BILLyTheLiTTle/AndroidProject_Shortcuts

以上所有,回答从不同的button捕捉事件的问题。

关于取消通知我在这里redirect你( 如何在Android中清除通知 )。 只要记得在第一次调用通知时使用在notify方法中parsing的id

在集合中使用setOnClickPendingIntent似乎不起作用。

所以请尝试setPendingIntentTemplate而不是setOnClickPendingIntent 。 欲了解更多信息bellow android开发人员链接…

点击这里查看更多细节 – 转到Android开发者网站。

在集合中使用setOnClickPendingIntent似乎不起作用:

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

尝试使用setPendingIntentTemplate来代替。