Ich versuche, ein erzwungenes benutzerdefiniertes Update eines Widgets zu implementieren. Bisher werden die Daten beim Empfang einer Benachrichtigung gelesen, aber beim Versuch, das Widget mit diesen Daten zu aktualisieren, erhalte ich einen Fehler. Es besagt, dass ich die Funktion picasso.load.into aus dem UI-Thread verwenden muss. Wie kann ich dies von einem Widget ohne Aktivität tun? und im Benachrichtigungsdienst? Mein Code ist unten.Kann Widget-Benutzeroberfläche nicht in NotificationExtenderService aktualisieren
NotificationServiceClass
public class NotificationEx extends NotificationExtenderService {
private String l;
private String x;
@Override
protected boolean onNotificationProcessing(OSNotificationPayload notification) {
// Read properties from notification.
JSONObject jsonObject = notification.additionalData;
if (jsonObject.has("pic")) {
try {
l = jsonObject.getString("pic");
Log.e("treeN",l);
} catch (Exception e) {
Log.e("treeN",e.getMessage());
}
}
if (jsonObject.has("quote")) {
try {
x = jsonObject.getString("quote");
Log.e("treeN",x);
} catch (Exception e) {
Log.e("treeN",e.getMessage());
}
}
if (x!=null&&l!=null) {
/*MyApplication myApplication = new MyApplication();
myApplication.setPushedInfo(l,x);*/
setPushedInfo(l,x);
}
// Return true to stop the notifications from displaying.
return false;
}
public void setPushedInfo(String pic, String quote) {
RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.widget_home);
remoteViews.setTextViewText(R.id.widget_text, quote);
Picasso picasso = Picasso.with(this);
ComponentName thisWidget = new ComponentName(this, WidgetProvider.class);
int[] views = AppWidgetManager.getInstance(this).getAppWidgetIds(thisWidget);
picasso.load(pic)
.into(remoteViews, R.id.widget_background,views);
}
}