我制作了application
和widget
。我必须从应用程序更新我的widget
,即将一些数据发送到小部件。我使用了应用程序中的sendBroadcast(Intent intent)
方法。它在MyWidgetProvider应用程序的onReceive(Context context, Intent intent)
方法中很受欢迎。我能够获取数据,但onUpdate()
方法似乎不起作用,因此没有窗口小部件的UI。
这是widget app的代码
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);
}
}
答案 0 :(得分:0)
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;
}
您应该从onUpdate
致电onReceive
。接收广播不仅会使AppWidgetProvider
调用onUpdate。你需要手动完成。
答案 1 :(得分:0)
我必须在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);
}