package com.aiyou.appwidget; import com.aiyou.R; import android.annotation.TargetApi; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.widget.RemoteViews; import android.widget.Toast; /** * @author sollian */ public class WidgetProvider extends AppWidgetProvider { public static String EXTRA_ARTICLE = "widget_article"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int appWidgetId : appWidgetIds) { updateWidget(context, appWidgetId); } super.onUpdate(context, appWidgetManager, appWidgetIds); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public void onReceive(Context context, Intent intent) { if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) { // “手动更新”广播 Uri data = intent.getData(); int buttonId = Integer.parseInt(data.getSchemeSpecificPart()); Toast.makeText(context, "开始更新", Toast.LENGTH_SHORT).show(); AppWidgetManager mgr = AppWidgetManager.getInstance(context); mgr.notifyAppWidgetViewDataChanged(buttonId, R.id.widget_lv); } super.onReceive(context, intent); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressWarnings("deprecation") private void updateWidget(Context context, int id) { Intent serviceIntent = new Intent(context, WidgetService.class); serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id); serviceIntent.setData(Uri.parse(serviceIntent .toUri(Intent.URI_INTENT_SCHEME))); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); remoteViews.setRemoteAdapter(id, R.id.widget_lv, serviceIntent); Intent clickIntent = new Intent(context, WidgetClickActivity.class); PendingIntent clickPI = PendingIntent.getActivity(context, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setPendingIntentTemplate(R.id.widget_lv, clickPI); // 设置点击按钮对应的PendingIntent:即点击按钮时,发送广播。 remoteViews.setOnClickPendingIntent(R.id.widget_bt, getPendingIntent(context, id)); AppWidgetManager.getInstance(context).updateAppWidget(id, remoteViews); } private PendingIntent getPendingIntent(Context context, int id) { Intent intent = new Intent(); intent.setClass(context, WidgetProvider.class); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); intent.setData(Uri.parse("custom:" + id)); return PendingIntent.getBroadcast(context, 0, intent, 0); } }