我正在创建一个包含三个元素的通知。我希望每个都可以点击,启动捆绑数据的活动。我正在使用NotificationCompat.Builder:
NotificationCompat.Builder builder =
new NotificationCompat.Builder(Application.getApp())
.setSmallIcon(R.drawable.action_icon_small)
.setContent(notificationView);
我可以通过将setContentIntent添加到上面来使整个通知可以点击,但我还是试图在通知中点击可视化。我尝试了不同的方法,在action_notification_x和action_notification_y中设置setOnlickPendingInent,在action_notification和两者上设置setPendingIntentTemplate。有时最后一个元素(即action_notification_y)可以被点击,但不是_x。有什么我想念的吗?
以下是一些代码:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/action_notifiation"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="left"
android:orientation="horizontal"
android:weightSum="100" >
<ImageView
android:id="@+id/action_notification_logo"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="13"
android:layout_margin="10dp"
android:src="@drawable/logo" />
<LinearLayout
android:id="@+id/action_notification_x"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="29"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:visibility="gone">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textColor="@android:color/black"
android:textSize="12sp"
android:text=""
android:layout_gravity="center_horizontal"/>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_horizontal"
android:src="@drawable/action_icon_x" />
</LinearLayout>
<LinearLayout
android:id="@+id/action_notification_y"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="29"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:visibility="gone">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textColor="@android:color/black"
android:textSize="12sp"
android:text=""
android:layout_gravity="center_horizontal"/>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_horizontal"
android:src="@drawable/action_icon_y" />
</LinearLayout>
</LinearLayout>
答案 0 :(得分:3)
您无法在通知中添加操作吗?例如:
builder.addAction(R.drawable.ic_cancel,
mContext.getString(R.string.cancel_notification), cancelPendingIntent);
所以在上面的例子中,我有一个'取消'动作,当它被点击时我会触发以下PendingIntent
:
PendingIntent cancelPendingIntent =
PendingIntent.getService(context, 0, cancelIntent, PendingIntent.FLAG_CANCEL_CURRENT);
我希望这会有所帮助:)
答案 1 :(得分:3)
这是关于Notification
的代码段,请先查看:
Notification notification = new Notification.Builder(context)
// Show controls on lock screen even when user hides sensitive content.
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setSmallIcon(R.drawable.ic_stat_player)
// Add media control buttons that invoke intents in your media service
.addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
.addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
.addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
// Apply the media style template
.setStyle(new Notification.MediaStyle()
.setShowActionsInCompactView(1 /* #1: pause button */)
.setMediaSession(mMediaSession.getSessionToken())
.setContentTitle("Wonderful music")
.setContentText("My Awesome Band")
.setLargeIcon(albumArtBitmap)
.build();
然后您将看到:.addAction(R.drawable.ic_prev, "Previous", prevPendingIntent)
是关于单击标签然后触发某些任务。我想这就是你想要的。
答案 2 :(得分:1)
尝试这样的事情:
private static void generateNotification(Context context, String message) {
int icon = R.drawable.ic_stat_gcm;
long when = System.currentTimeMillis();
NotificationManager notificationManager = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, message, when);
notification.defaults |=Notification.DEFAULT_SOUND;
String title = context.getString(R.string.app_name);
Intent notificationIntent = new Intent(context, MainActivity.class);
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intent =
PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);
}