0

I have a problem, I wonder how I can send data from BroadcastReceiver(it is in Service) to widget and update widget after click button. Specifically, I mean how to send this title song to my widget

Below is my BroadcastReciver:

private final BroadcastReceiver mWidgetEventsReceiver = new BroadcastReceiver() {

    private Bundle extras;
    private MediaService mService;
    AppWidgetManager appWidgetManager;
    private static final String TAG = "MediaMusicWidgetProvider";

    @Override
    public void onReceive(Context context, Intent intent) {
        extras = intent.getExtras();

        Log.d(TAG, extras.getString("EVENT"));

        if (extras.getString("EVENT") == "NEXT") {
            Log.d(TAG, "onReceive: switch");
            if (mPlaybackModel != null) {
                MediaItemMetadata mediaItemMetadata = mPlaybackModel.getMetadata();
                if (mediaItemMetadata != null) {
                    MediaPlayerSong song = new MediaPlayerSong();
                    song.setTitle(mediaItemMetadata.getTitle() + "");
                    song.setDurationSec((int) (mPlaybackModel.getMaxProgress() / 1000));
                    song.setArtist(mediaItemMetadata.getSubtitle() + "");
                    song.setAlbum(mediaItemMetadata.getDescription() + "");
                    String title = mediaItemMetadata.getTitle()+"";
                    Log.d(TAG, "onReceive: "+title);
                }
            }
            onNextTrack();
        }

and there is my Provider

protected PendingIntent getPendingSelfIntent(Context context, String action) {
    Intent intent = new Intent(context, MediaMusicWidgetProvider.class);
    intent.setAction(action);
    return PendingIntent.getBroadcast(context, 0, intent, 0);
}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    log("onUpdate");
    for (int appWidgetId : appWidgetIds) {
        mViews = new RemoteViews(context.getPackageName(), R.layout.media_widget_blue);
        appWidgetManager.updateAppWidget(appWidgetId, mViews);
    }
}

@Override
public void onReceive(Context context, Intent intent) {
    log("onReceive");
    super.onReceive(context, intent);


    if (intent.getAction() == NEXT_BUTTON) {
        Toast.makeText(context, "Button next", Toast.LENGTH_SHORT).show();

        Intent eventIntent = new Intent("com.mobica.widget.action.TEST");
        eventIntent.putExtra("EVENT", NEXT_BUTTON);
        LocalBroadcastManager.getInstance(context).sendBroadcast(eventIntent);;

    } else if (intent.getAction() == PREV_BUTTON) {
        Toast.makeText(context, "Button prev", Toast.LENGTH_SHORT).show();

        Intent eventIntent = new Intent("com.mobica.widget.action.TEST");
        eventIntent.putExtra("EVENT", PREV_BUTTON);
        LocalBroadcastManager.getInstance(context).sendBroadcast(eventIntent);

    } else if (intent.getAction() == PAUSE_BUTTON) {
        Toast.makeText(context, "Button pause", Toast.LENGTH_SHORT).show();

        Intent eventIntent = new Intent("com.mobica.widget.action.TEST");
        eventIntent.putExtra("EVENT", PAUSE_BUTTON);
        LocalBroadcastManager.getInstance(context).sendBroadcast(eventIntent);

    }
}


@Override
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
    log("onAppWidgetOptionsChanged");

    mViews = new RemoteViews(context.getPackageName(), getProperLayout(context, newOptions));
    mViews.setOnClickPendingIntent(mNextBtnId, getPendingSelfIntent(context, NEXT_BUTTON));
    mViews.setOnClickPendingIntent(mPrevBtnId, getPendingSelfIntent(context, PREV_BUTTON));
    mViews.setOnClickPendingIntent(mPauseBtnId, getPendingSelfIntent(context, PAUSE_BUTTON));

    appWidgetManager.updateAppWidget(appWidgetId, mViews);
}

private int getProperLayout(Context context, Bundle newOptions) {
    int maxWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);
    int maxHeight = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);
    int minHeight = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
    int minWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
    log("Min width: " + minWidth + "\nMax width: " + maxWidth + "\nMin height: " + minHeight + "\nMaxHeight: " + maxHeight);

    boolean isLongWidget = minWidth > 460;

    String currentTheme = Settings.Global.getString(context.getContentResolver(), THEME_KEY);
    int properLayoutId = isLongWidget ? R.layout.media_widget_blue_long : R.layout.media_widget_blue;
    if (currentTheme == null) {
        return properLayoutId;
    }

    switch (currentTheme) {
        case THEME_BLUE:
            properLayoutId = isLongWidget ? R.layout.media_widget_blue_long : R.layout.media_widget_blue;
            break;
        case THEME_GREEN:
            properLayoutId = isLongWidget ? R.layout.media_widget_green_long : R.layout.media_widget_green;
            break;
        case THEME_PURPLE:
            properLayoutId = isLongWidget ? R.layout.media_widget_purple_long : R.layout.media_widget_purple;
            break;
    }

    return properLayoutId;
}

}

I try do it like here https://stackoverflow.com/a/4412949/11766578 but I have problem with this line of code:

RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_2x1);

like u can see above I switch layout in dependencies which color of theme user select. Please for help! :)

boogieBug
  • 1
  • 2

0 Answers0