2013-08-31 45 views
5

Tôi có một tiện ích và tôi phải cập nhật tiện ích con khi hành động android.media.RINGER_MODE_CHANGED xảy ra. Tôi có thu phát sóng folowing:widget cập nhật android từ bộ thu sóng phát sóng

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

và mã si này cho widget của tôi

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> 

nên vấn đề của tôi là ngay cả khi các hướng dẫn appWidgetManager.updateAppWidget(widgetId, remoteViews); từ máy thu phát sóng của tôi được thực thi, phương pháp cập nhật bên trong tiện ích con không được thực thi. Có ai biết tại sao không?

Trả lời

16

dường như AppWidgetProvider kéo dài BroadcastReceiver vì vậy đây là mã của tôi:?

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

như một nét duyên dáng :) – Sandman

+0

gì mã này sẽ làm vui lòng giải thích một chút nó sẽ gọi phương thức onupdate mỗi lần phát sóng là nhận được hay cái gì khác? –

+0

hãy cho tôi biết mục đích của ba dòng này –

Các vấn đề liên quan