Я разрабатываю какие-то элементы управления мультимедиа для своего Android 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, которое здесь не работает?
Запись манифеста выглядит следующим образом:
<activity
android:name=".media.ControlActivity"
android:allowEmbedded="true"
android:exported="true"
android:launchMode="singleTop"
>
Я пробовал все комбинации флагов, а также обновлял только необходимые части, но ничего не изменилось.
Помощь приветствуется. Дайте мне знать, если вам нужна дополнительная информация.
Изменить: основная проблема заключается в том, что встроенная активность (для пользовательского макета) на второй странице уведомления всегда воссоздается, как только я вызываю уведомление. Повторное использование, только обновление измененных значений на первой странице или ничего не обновляется не имеет никакого эффекта.