42

RemoteViewsフォアグラウンド モードで通知を実行しているカスタムから通知を作成してServiceいます (つまり、通知がユーザーに表示されている限り、サービスはアクティブなままです)。通知は進行中として設定されているため、ユーザーはそれをスワイプできません。

ImageViewたとえば、リモート ビューのレイアウトに含まれる に示されているビットマップを変更したり、 のテキスト値を変更したりしたいと考えていTextViewます。リモートビューのレイアウトは XML レイアウトファイルで設定します。

私の問題は、通知が作成されてユーザーに表示されると、 に表示されている変更のようRemoteViewsな の関数を呼び出すと、呼び出しを行わない限り、変更が表示されないことです。setImageViewResource()BitmapImageViewsetImageViewResource()

NotificationManager.notify( id, notification );

また

Service.startForeground(id,notification);

しかし、これは私には正しく聞こえません。RemoteViews既に作成されている通知で UI を更新するには、通知を再初期化する必要があるとは信じられません。Button通知を制御している場合、タッチして離すと更新されます。ですから、これを適切に行う方法があるはずですが、方法がわかりません。

Serviceインスタンス内で通知を作成するコードは次のとおりです。

this.notiRemoteViews = new MyRemoteViews(this,this.getApplicationContext().getPackageName(),R.layout.activity_noti1);

Notification.Builder notibuilder = new Notification.Builder(this.getApplicationContext());
notibuilder.setContentTitle("Test");
notibuilder.setContentText("test");
notibuilder.setSmallIcon(R.drawable.icon2);
notibuilder.setOngoing(true);

this.manager = (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE);
this.noti = notibuilder.build();
this.noti.contentView = this.notiRemoteViews;
this.noti.bigContentView = this.notiRemoteViews;
this.startForeground(NOTIFICATION_ID, this.noti);

UI の変更を通知に「強制」する関数:

public void updateNotiUI(){
    this.startForeground(NOTIFICATION_ID, this.noti);
}

クラス内MyRemoteViewsで、必要に応じてこれを実行して UI を変更します。

this.setImageViewResource(R.id.iconOFF, R.drawable.icon_off2);
this.ptMyService.updateNotiUI();

通知で UI コンポーネントを更新する正しい方法を誰か教えてもらえますRemoteViewsか?

4

4 に答える 4

1

Notificationオブジェクトを保存するのではなく、オブジェクトを保存しNotification.Builderます。プッシュする前に毎回新しい通知を生成します

NotificationManager.notify( id, notification );
于 2015-02-05T05:58:51.657 に答える