Android 单击时通知开始 activity

Android notification start activity on click

我正在创建一个包含三个元素的通知。我希望它们中的每一个都是可点击的,开始一个 activity 与捆绑数据。我正在使用 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>

你不能给通知添加一个动作吗?例如:

builder.addAction(R.drawable.ic_cancel,
      mContext.getString(R.string.cancel_notification), cancelPendingIntent);

所以在上面的例子中,我有一个动作 'Cancel',当它被点击时,我触发了下面的 PendingIntent:

PendingIntent cancelPendingIntent =
    PendingIntent.getService(context, 0, cancelIntent, PendingIntent.FLAG_CANCEL_CURRENT);

希望对您有所帮助:)

这是我关于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)是点击一个标签,然后触发一些任务。我想这就是你想要的。

尝试这样的事情:

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