Android ウェア用のある種のメディア コントロールを開発しています。シナリオは次のとおりです。
ウェア アプリの WearableListenerService は、アーティスト/タイトルなどのメディア データが変更されたときに通知されます。進行中の通知が表示され、フルスクリーンの 2 ページ目にいくつかのコントロールが表示されます。スマートフォンに表示したくないので、通知はウェアラブル アプリに組み込まれています。
2 番目のページは、表示インテントで焼き付けられたアクティビティで構成されています。
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);
現在、通知は時々更新され、最初の通知ページに新しいデータが表示されます。これにより、通知が更新されるたびに 2 番目のページのアクティビティが強制的に再作成されます。これにより、2 番目のページ内のアクティビティが再作成されたことをユーザーが確認できる、見苦しい動作が発生します。
2 ページ目のアクティビティが完全に再作成されないようにする方法 (onDestroy、onCreate) や、通知の最初のページのデータのみを更新する方法はありますか? ここで実際に機能しないのは PendingIntent の作成ですか?
マニフェスト エントリは次のようになります。
<activity
android:name=".media.ControlActivity"
android:allowEmbedded="true"
android:exported="true"
android:launchMode="singleTop"
>
必要な部分だけを更新するだけでなく、フラグのすべての組み合わせを試しましたが、何も変わりません。
助けていただければ幸いです。さらに情報が必要な場合はお知らせください。
編集: 主な問題は、通知を呼び出すとすぐに、通知の 2 ページ目にある埋め込みアクティビティ (カスタム レイアウトの場合) が常に再作成されることです。再利用、最初のページの変更された値のみの更新、または何も更新しないことは効果がありません。