2013-08-31 15 views
5

Mam widget i muszę zaktualizować widget, gdy pojawi się akcja android.media.RINGER_MODE_CHANGED. Mam folowing odbiornik nadanie:widget aktualizacji Androida z odbiornika transmisji

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

i ten kod SI moim 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> 

więc moim problemem jest to, że nawet jeśli dyspozycja appWidgetManager.updateAppWidget(widgetId, remoteViews); z mojego odbiornika transmisji jest wykonywana metoda aktualizacji wewnątrz widget nie jest wykonywany. Czy ktoś wie dlaczego?

Odpowiedz

16

wydaje się, że AppWidgetProvider rozciąga BroadcastReceiver więc tutaj jest mój kod:?

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> 
+0

jak urok :) – Sandman

+0

co będzie ten kod zrobić proszę wyjaśnić trochę będzie wywołać metodę onUpdate każdym czasie transmisji jest otrzymał? lub coś innego? –

+0

proszę podać cel tych trzech linii: –

Powiązane problemy