【问题标题】:PendingIntent on a Widget小部件上的 PendingIntent
【发布时间】:2012-05-12 19:51:33
【问题描述】:

我正在开发一个用于显示联系人的 Android 小部件,但是当我单击联系人图像时无法创建 eventClick

我使用StackRemoteViewsFactory,例如将联系人添加到我的GridView

这是我的代码:

public RemoteViews getViewAt(int position) {

    Bitmap photo = loadContactPhoto(mContext.getContentResolver(), mWidgetItems.get(position).id);

    RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.contact_item);
    rv.setTextViewText(R.id.name, mWidgetItems.get(position).name);
    if (photo != null) {
        rv.setImageViewBitmap(R.id.image, photo);
    }

    final Intent fillInIntent = new Intent();
    final Bundle extras = new Bundle();
    extras.putLong(FavoriteContactsWidgetProvider.CONTACT_ID, mWidgetItems.get(position).id);
    fillInIntent.putExtras(extras);
    rv.setOnClickFillInIntent(R.id.contact_frame, fillInIntent);

    return rv;
}

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    for (int i = 0; i < appWidgetIds.length; ++i) {
        final Intent intent = new Intent(context, FavoriteContactsWidgetService.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);

        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));

        RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        rv.setRemoteAdapter(appWidgetIds[i], R.id.grid_view, intent);

        final Intent onClickIntent = new Intent(context, FavoriteContactsWidgetProvider.class);

        onClickIntent.setAction(FavoriteContactsWidgetProvider.CLICK_ACTION);
        onClickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
        onClickIntent.setData(Uri.parse(onClickIntent.toUri(Intent.URI_INTENT_SCHEME)));

        final PendingIntent onClickPendingIntent = PendingIntent.getBroadcast(context, 0, onClickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        rv.setPendingIntentTemplate(R.id.image, onClickPendingIntent);

        appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);
}

有人有一些想法来完成这项工作吗?

【问题讨论】:

标签: android widget android-pendingintent


【解决方案1】:

注意这一行:

 rv.setPendingIntentTemplate(R.id.image, onClickPendingIntent);

我认为你应该将 R.id.image 替换为 R.id.grid_view,因为 Google 的文档已在 setPendingIntentTemplate 方法中将 viewId 解释为“点击时将使用此 PendingIntent 模板的集合的 ID” (int viewId, PendingIntent pendingIntentTemplate),

【讨论】:

    【解决方案2】:

    您需要在 WidgetProvider 的 onRecieve() 方法中接收待处理的意图广播。

    还要确保您在 android manifest 的 WidgetProvider 条目(接收器)中将该广播操作作为意图过滤器。

    【讨论】:

      猜你喜欢
      • 2014-06-13
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 2018-06-16
      • 2022-01-21
      • 2021-08-22
      相关资源
      最近更新 更多