2

我正在为我的安卓设备开发某种媒体控件。场景如下:

当媒体数据(即艺术家/标题)发生变化时,会通知 Wear 应用中的 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"
        >

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

非常感谢您的帮助。如果您需要更多信息,请告诉我。

编辑:主要问题似乎是通知第二页中的嵌入活动(用于自定义布局)总是在我调用通知时重新创建。重用,仅更新第一页上更改的值或不更新任何内容都没有效果。

4

2 回答 2

0

没有方法可以防止在通知中重新创建嵌入的活动,您可以尝试这种方式。

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

于 2014-12-12T12:38:50.477 回答
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);

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

于 2014-12-10T09:48:52.687 回答