Android Wear通知页面操作

时间:2014-07-11 02:49:13

标签: android android-notifications

我有一个应用程序可以启动Wear设备上的通知(通知已创建并显示在Wear设备上)。

我想要做的是让“第一个”通知页面显示一些高级信息(应用程序名称,滚动以查看更多等等),然后在此之后列出包含内容的页面。

工作正常。问题是我想在每个页面附加Action(以启动PendingIntent)。但是,无论我尝试什么,我都无法让页面执行Action

我试过了:

setContentIntent
addAction
addAction and extend(new Notification.WearableExtender().setContentAction(0))

有人有什么想法吗?

我正在使用Notification,而不是NotificationCompat,但我认为这不应该有所作为。

更新:我正在手表上创建通知。这是我使用的代码:

private void createNotifications(ArrayList<Thing> things) {
    DataApi data = Wearable.DataApi;

    int notificationId = 0;

    NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    Notification.Builder mainBuilder = new Notification.Builder(this)
            .setSmallIcon(R.drawable.default_icon)
            .setContentTitle("Things")
            .setContentText("Swipe to see your things")
            .setPriority(Notification.PRIORITY_DEFAULT);

    List<Notification> pages = new ArrayList<>(things.size());

    for(Thing thing : things) {
        pages.add(createNotificationPageForThing(data, thing, notificationId).build());
        notificationId++;
    }

    Notification n = new Notification.WearableExtender().addPages(pages).extend(mainBuilder).build();
    nm.notify(notificationId, n);
}

private Notification.Builder createNotificationPageForThing(DataApi data, Thing thing, int notificationId) {
    Asset bitmapAsset = getBitmapAsset(data, contact);

    Intent thingIntent = new Intent(this, WearDetailActivity.class);
    thingIntent.putExtra(WearDetailActivity.DETAIL_EXTRA, thing);
    PendingIntent thingPendingIntent = PendingIntent.getActivity(this, notificationId, thingIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    Notification.Action action = new Notification.Action(R.drawable.ic_action_social_person, "More details",  thingPendingIntent);
    Notification.Builder builder = new Notification.Builder(this)
            .setSmallIcon(R.drawable.ic_action_social_person)
            .setContentTitle(thing.getDisplayName())
            .setPriority(Notification.PRIORITY_DEFAULT)
            .addAction(action)
            .extend(new Notification.WearableExtender().setContentAction(0));

    if(bitmapAsset != null) {
        try {
            Bitmap b = BitmapFactory.decodeStream(
                    data.getFdForAsset(connection.getClient(), bitmapAsset).await().getInputStream());
            builder.setLargeIcon(b);
        } catch (Throwable ignore) {}
    }

    return builder;
}

2 个答案:

答案 0 :(得分:0)

@Eliezer,阅读以下内容我不明白你正在经历的行为究竟是什么......详细解释它可能有助于调试你的问题。

  

然而,无论我尝试什么,我都无法让页面执行Action

使用.addAction()应该适用于您的情况。如果您要从设备创建通知,而不是手表本身,则需要使用WearableExtender。只是为了确认一些明显的东西 - 你正在传递.addAction PendingIntent对吗?

这是我的一个应用程序的代码片段,它完全符合您的目标 - 我在第一页中只有“轻扫动作”文本,接下来的两页执行不同的操作。

 NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

 Intent openIntent = new Intent(this, CommonWearIntentService.class);
 openIntent.setAction(CommonWearIntentService.ACTION_OPEN_ON_PHONE);
 PendingIntent openPendingIntent = PendingIntent.getService(this, 0, openIntent, PendingIntent.FLAG_UPDATE_CURRENT);

 Intent addTransactionIntent = new Intent(this, CommonWearIntentService.class);
 addTransactionIntent.setAction(CommonWearIntentService.ACTION_ADD_TRANSACTION);
 PendingIntent addTransactionPendingIntent = PendingIntent.getService(this, 0, addTransactionIntent, PendingIntent.FLAG_UPDATE_CURRENT);

 builder.setSmallIcon(R.drawable.ic_notification)
        .setContentTitle(getString(R.string.app_name))
        .setContentText(getString(R.string.swipe_for_actions))
        .addAction(R.drawable.add_transaction, getString(R.string.add_transaction), addTransactionPendingIntent)
        .addAction(R.drawable.common_full_open_on_phone, getString(R.string.common_open_on_phone), openPendingIntent)
        .setVibrate(new long[]{500, 500, 500, 1000})
        .setLights(Color.BLUE, 3000, 3000)
        .setOngoing(true);

notificationManager.notify(ONGOING_NOTIFICATION_ID, builder.build());

希望这有帮助!

答案 1 :(得分:-1)

根据documentation,您必须使用NotificationCompat。切换到setContentIntent()后,看起来是设置PendingIntent的正确方法。

来自链接文档的示例:

// Create builder for the main notification
NotificationCompat.Builder notificationBuilder =
        new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.new_message)
        .setContentTitle("Page 1")
        .setContentText("Short message")
        .setContentIntent(viewPendingIntent);

// Create a big text style for the second page
BigTextStyle secondPageStyle = new NotificationCompat.BigTextStyle();
secondPageStyle.setBigContentTitle("Page 2")
               .bigText("A lot of text...");

// Create second page notification
Notification secondPageNotification =
        new NotificationCompat.Builder(this)
        .setStyle(secondPageStyle)
        .build();

// Add second page with wearable extender and extend the main notification
Notification twoPageNotification =
        new WearableExtender()
                .addPage(secondPageNotification)
                .extend(notificationBuilder)
                .build();

// Issue the notification
notificationManager =
        NotificationManagerCompat.from(this);
notificationManager.notify(notificationId, twoPageNotification);