Cześć,
mam problem z widgetem.
Mam coś takiego:
public class AppWidget extends AppWidgetProvider {
private static final String APP_WIDGET_SERVICE = "AppWidgetService";
public static String SERVICE_INTENT = "AppWidgetExtra";
private static int count = 0;
private boolean serviceRunning;
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.app_widget);
int visible = (count > 0) ? View.VISIBLE : View.GONE;
views.setViewVisibility(R.id.txtCount, visible);
views.setTextViewText(R.id.txtCount, Integer.toString(count));
Intent mainIntent = new Intent(context, MainActivity.class);
mainIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mainIntent.putExtra("aaaaaaa", "a=" + count);
views.setOnClickPendingIntent(R.id.rlayout, PendingIntent.getActivity(context, 0, mainIntent, 0));
appWidgetManager.updateAppWidget(appWidgetId, views);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE) && intent.getExtras() != null) {
count = intent.getExtras().getInt(AppWidget.SERVICE_INTENT, -1);
}
super.onReceive(context, intent);
}
@Override
public void onEnabled(Context context) {
// Enter relevant functionality for when the first widget is created
}
@Override
public void onDisabled(Context context) {
// Enter relevant functionality for when the last widget is disabled
}
}
a w MainActivity w onCreate mam coś takiego:
if (getIntent() != null) {
if (getIntent().getExtras() != null) {
Log.d("aaaaa", "fragment=" + getIntent().getExtras().getString("aaaaaaa", "dasdas"));
} else {
Log.d("aaaaaaa", "null3211");
}
} else {
Log.d("aaaaaaa", "null");
}
Pomimo iż AppWidget.count zmienia się, ja zawsze w MainActivity widzę w logach: fragment=a=-1
Ktoś wie czemu tak się dzieje?
[EDIT]
Wystarczy dodać flagę PendingIntent.FLAG_CANCEL_CURRENT.
Zamienić:
views.setOnClickPendingIntent(R.id.rlayout, PendingIntent.getActivity(context, 0, mainIntent, 0));
na
views.setOnClickPendingIntent(R.id.rlayout, PendingIntent.getActivity(context, 0, mainIntent, PendingIntent.FLAG_CANCEL_CURRENT));