8

I have an widget and I must update the widget when action android.media.RINGER_MODE_CHANGED occurs. I have the folowing broadcast receiver:

public void onReceive(Context context, Intent intent) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext());
        ComponentName thisWidget = new ComponentName(context.getApplicationContext(), ExampleAppWidgetProvider.class);
        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
        if (appWidgetIds != null && appWidgetIds.length > 0) {
            for (int widgetId : appWidgetIds) {
                RemoteViews remoteViews = new RemoteViews(context
                        .getApplicationContext().getPackageName(),
                        R.layout.widget1);
                appWidgetManager.updateAppWidget(widgetId, remoteViews);
            }
        }
    }

and this si code for my widget

public class ExampleAppWidgetProvider extends AppWidgetProvider {
    DateFormat df = new SimpleDateFormat("hh:mm:ss");

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;
        for (int i = 0; i < N; i++) {
            int appWidgetId = appWidgetIds[i];
            //my pudate widget code
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }
}

<receiver android:name=".ExampleAppWidgetProvider" android:label="demo widget">
  <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  </intent-filter>
  <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget1_info" />
</receiver>

so my problem is that even if the instruction appWidgetManager.updateAppWidget(widgetId, remoteViews); from my broadcast receiver is executed, the update method inside the widget is not executed. Does anybody knows why?

Buda Gavril
  • 21,409
  • 40
  • 127
  • 196

1 Answers1

19

it seems that AppWidgetProvider extends BroadcastReceiver so here is my code :

public class ExampleAppWidgetProvider extends AppWidgetProvider {
    DateFormat df = new SimpleDateFormat("hh:mm:ss");

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        //my update code here
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext());
        ComponentName thisWidget = new ComponentName(context.getApplicationContext(), ExampleAppWidgetProvider.class);
        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
        if (appWidgetIds != null && appWidgetIds.length > 0) {
            onUpdate(context, appWidgetManager, appWidgetIds);
        }
    }
}

<receiver android:name=".ExampleAppWidgetProvider" android:label="demo widget">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.media.RINGER_MODE_CHANGED"/>
    </intent-filter>
    <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget1_info"/>
</receiver>
Buda Gavril
  • 21,409
  • 40
  • 127
  • 196
  • what will this code do ?please explain a bit ?will it call the method onupdate each time the broadcast is received ?or something else ? – Ankit Srivastava May 30 '14 at 08:36
  • please tell me the purpose of these three lines – Ankit Srivastava May 30 '14 at 08:37
  • AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext()); ComponentName thisWidget = new ComponentName(context.getApplicationContext(), ExampleAppWidgetProvider.class); int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); – Ankit Srivastava May 30 '14 at 08:38
  • 1
    you need to obtain these variables to use them as parameters for the method onUpdate(context, appWidgetManager, appWidgetIds); – Buda Gavril May 30 '14 at 08:49
  • There's got to be a better way to do this by now, but I can't seem to find it. :-) – A. L. Flanagan Mar 14 '19 at 20:42