Android Wear:始终重新创建通知页面的DisplayIntent中的活动

时间:2014-12-09 12:56:01

标签: android android-notifications android-pendingintent wear-os android-wear-notification

我正在为我的机器人佩戴开发某种媒体控件。方案如下:

当媒体数据发生变化(即艺术家/标题)时,会通知穿戴应用程序中的WearableListenerService。显示正在进行的通知,其中包含全屏第二页,其中包含一些控件。 因为我不希望它显示在我的智能手机上,所以通知是在可穿戴应用程序中构建的。

第二页包含在显示意图中烘焙的活动:

Intent pageIntent = new Intent(this, ControlActivity.class);
    pageIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivity(
            getApplicationContext(),
            0,
            pageIntent,
            0);

    Notification controlPage = new Notification.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .extend(
                    new Notification.WearableExtender()
                            .setCustomSizePreset(Notification.WearableExtender.SIZE_FULL_SCREEN)
                            .setDisplayIntent(pendingIntent))
            .build();

    Notification notification = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.icon)
            .setContentTitle(currentArtist)
            .setContentText(currentTitle)
            .setOngoing(true)
            .extend(
                    new NotificationCompat.WearableExtender()
                            .addPage(controlPage)
                            .addAction(new NotificationCompat.Action(button, null, intent))
                            .setContentAction(0)
                            .setContentIcon(button)
                            .setBackground(BitmapFactory.decodeResource(getResources(), bg))
                            .setHintHideIcon(true)
            )
            .build();
    NotificationManagerCompat.from(this).notify(NOTIFICATION_ID, notification);

现在,通知会不时刷新,以便在第一个通知页面上显示新数据,这会强制每次更新通知时重新创建第二页中的活动。这会导致一些丑陋的行为,用户可以看到第二页内的活动被重新创建。

有没有办法阻止第二页中的活动被完全重新创建(onDestroy,onCreate)和/或只更新通知的第一页上的数据? 是PendingIntent创建在这里不起作用吗?

Manifest条目如下所示:

    <activity
        android:name=".media.ControlActivity"
        android:allowEmbedded="true"
        android:exported="true"
        android:launchMode="singleTop"
        >

我已经尝试了所有标志组合,只更新了必要的部分,但没有任何变化。

非常感谢帮助。如果您需要更多信息,请与我们联系。

编辑:主要问题似乎是,一旦我调用notify,就会重新创建通知第二页中的嵌入式活动(对于自定义布局)。重用,仅更新第一页上的更改值或不更新任何内容无效。

2 个答案:

答案 0 :(得分:0)

只需将新信息广播到第二个活动,并在收到广播时更新字段。并将其设置为本地,因此广播仅涉及您的应用程序。

在第二个活动中,将BroadcastReceiver添加为成员属性:
private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { /*do what you're supposed to do, update your data you get the information from the intent by calling intent.getXExtra() as usual*/ } };

并在onCreate()方法中注册:
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, new IntentFilter("your-filter-name"));

在通知活动中,更新信息时,请添加:
Intent intent = new Intent("your-filter-name"); intent.putExtra(...); LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

您的第二项活动每次都不会重新创建,修改应顺利进行:)

答案 1 :(得分:0)

没有办法阻止在通知中重新创建嵌入式活动,您可以在这种情况下尝试这种方式。

在第二页中使用操作,并在点击操作时启动活动,当通知按时​​间更新时,活动将不会重新创建