I have made an application
and a widget
. I have to update my widget
from the application ie send some data to the widget. I used the sendBroadcast(Intent intent)
method from the application. It is well received in the onReceive(Context context, Intent intent)
method of MyWidgetProvider app. I am able to get the data, But the onUpdate()
method does not seem to work and hence no UI for the widget.
this is the code for 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);
}
}
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;
}
You are supposed to call onUpdate
from onReceive
. Receiving the broadcast won't just make the AppWidgetProvider
call onUpdate by itself. You need to do that manually.
I had to make use of RemoteViews in the onReceive method itself. This worked for me.
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);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.