![](/img/trans.png)
[英]How To Update A Widget from Another Widget with A DropDown in Flutter and Dart?
[英]How to update widget from another application?
我已經制作了一個application
和一個widget
。 我必須從應用程序更新我的widget
,即向該窗口小部件發送一些數據。 我從應用程序中使用了sendBroadcast(Intent intent)
方法。 在MyWidgetProvider應用程序的onReceive(Context context, Intent intent)
方法中可以很好地接收到它。 我能夠獲取數據,但是onUpdate()
方法似乎不起作用,因此沒有小部件的UI。
這是小部件應用程序的代碼
public class MyWidgetProvider extends AppWidgetProvider {
public String team1name;
public String team2name;
public String team1score;
public String team2score;
public static boolean done=false;
public void onReceive(Context c, Intent intent){
Bundle extras = intent.getExtras();
if (extras == null) {
return;
}
team1name = extras.getString("team1name");
team2name = extras.getString("team2name");
team1score = extras.getString("team1score");
team2score = extras.getString("team2score");
done=true;
}
private static final String ACTION_CLICK = "ACTION_CLICK";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
// Get all ids
ComponentName thisWidget = new ComponentName(context,MyWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
Log.e("WidgetExample", "The victory is mine");
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
// Set the text
remoteViews.setTextViewText(R.id.update, team1name);
// Register an onClickListener
Intent i = new Intent(context, MyWidgetProvider.class);
i.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0, i, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
public void onReceive(Context c, Intent intent){
Bundle extras = intent.getExtras();
if (extras == null) {
return;
}
team1name = extras.getString("team1name");
team2name = extras.getString("team2name");
team1score = extras.getString("team1score");
team2score = extras.getString("team2score");
done = true;
}
您應該從onReceive
調用onUpdate
。 接收廣播不僅會使AppWidgetProvider
自己AppWidgetProvider
調用onUpdate。 您需要手動執行此操作。
我必須在onReceive方法本身中使用RemoteViews。 這對我有用。
public void onReceive(Context context, Intent intent){
Bundle extras = intent.getExtras();
if (extras == null) {
return;
}
team1name = extras.getString("team1name");
team2name = extras.getString("team2name");
team1score = extras.getString("team1score");
team2score = extras.getString("team2score");
player1 = extras.getString("player1");
player2 = extras.getString("player2");
extras = null;
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.team1name, team1name);
remoteViews.setTextViewText(R.id.team2name, team2name);
remoteViews.setTextViewText(R.id.teamscore, team2score);
remoteViews.setTextViewText(R.id.batsman1, player1);
remoteViews.setTextViewText(R.id.bowler, player2);
ComponentName cn = new ComponentName(context, MyWidgetProvider.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteViews);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.