RemoteViews
フォアグラウンド モードで通知を実行しているカスタムから通知を作成してService
います (つまり、通知がユーザーに表示されている限り、サービスはアクティブなままです)。通知は進行中として設定されているため、ユーザーはそれをスワイプできません。
ImageView
たとえば、リモート ビューのレイアウトに含まれる に示されているビットマップを変更したり、 のテキスト値を変更したりしたいと考えていTextView
ます。リモートビューのレイアウトは XML レイアウトファイルで設定します。
私の問題は、通知が作成されてユーザーに表示されると、 に表示されている変更のようRemoteViews
な の関数を呼び出すと、呼び出しを行わない限り、変更が表示されないことです。setImageViewResource()
Bitmap
ImageView
setImageViewResource()
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
か?