点击后Android通知启动活动

时间:2015-04-16 11:14:13

标签: android android-intent

我正在创建一个包含三个元素的通知。我希望每个都可以点击,启动捆绑数据的活动。我正在使用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>

3 个答案:

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