Skocz do zawartości
pionas

Widget uruchamiający aplikację nie przekazuje w intencji putExtra

    Rekomendowane odpowiedzi

    pionas
    Napisano (edytowane)

    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));

    Edytowane przez pionas
    odnalezienie błędu na stackoverflow ;)

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x