2

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 ページ目にある埋め込みアクティビティ (カスタム レイアウトの場合) が常に再作成されることです。再利用、最初のページの変更された値のみの更新、または何も更新しないことは効果がありません。

4

2 に答える 2

0

通知に埋め込まれたアクティビティを再作成するのを防ぐ方法はありません。あなたの感覚でこの方法を試すことができます。

2番目のページでアクションを使用し、アクションをクリックするとアクティビティを開始します。通知が時間によって更新されると、アクティビティは再作成されません

于 2014-12-12T12:38:50.477 に答える
0

新しい情報を 2 番目のアクティビティにブロードキャストし、ブロードキャストを受信したらフィールドを更新するだけです。そして、ブロードキャストがアプリケーションのみに関係するようにローカルにします。

2 番目のアクティビティで、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);

2 番目のアクティビティは毎回再作成されるわけではなく、変更はスムーズに進むはずです :)

于 2014-12-10T09:48:52.687 に答える