gpt4 book ai didi

android - AppWidget setFillInIntent 无法处理 setData 或 componentName 中的数据集?

转载 作者:搜寻专家 更新时间:2023-11-01 08:07:55 29 4
gpt4 key购买 nike

我想从我的应用程序小部件启动不同的应用程序。这个小部件是一个项目列表,点击一个项目应该会打开一个应用程序,比如 Google Plus。按下列表中的项目时没有任何反应。当我删除 setData 和 setComponentName 时,它​​会弹出一个对话框,询问要使用哪个应用程序。无法将数据和组件名称与 appWidget 集合上的 PendingIntent 合并吗?

我的 AppWidgetProvider 看起来像这样:

public class StreamsWidgetProvider extends AppWidgetProvider {

@Override
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];

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);

...

//set service for list view
Intent listIntent = new Intent(context, StreamsWidgetService.class);
listIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
listIntent.setData(Uri.parse(listIntent.toUri(Intent.URI_INTENT_SCHEME)));
views.setRemoteAdapter(R.id.streamItemsList, listIntent);

...

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
views.setPendingIntentTemplate(R.id.streamItemsList, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}

super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}

StreamsWidgetService 看起来像这样:

public class StreamsWidgetService extends RemoteViewsService {
private static final String TAG = "StreamsWidgetService";

@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new StreamItemWidgetFactory(intent);
}

private class StreamItemWidgetFactory implements RemoteViewsService.RemoteViewsFactory {
@Override
public RemoteViews getViewAt(int position) {
StreamItem item = mItems.get(position);

RemoteViews rv = new RemoteViews(getPackageName(), R.layout.widget_item);
...

Intent intent = new Intent();
intent.setData(ContentUris.withAppendedId(StreamItems.CONTENT_URI, item.getId()));

AccountType at = item.getAccountType();
intent.setComponent(new ComponentName(at.getPackageName(), at.getViewStreamItemActivity()));
rv.setOnClickFillInIntent(R.id.streamItemRowId, intent);
Log.d(TAG, "FillIntent set for " + item.getId() + " at position " + position + " with data " + intent.getDataString() + " and component " + intent.getComponent().toString());

return rv;
}

...
}
}

当使用没有 fillIntent 的正常 Activity 时,这有效:

final AccountType at = item.getAccountType();
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(ContentUris.withAppendedId(StreamItems.CONTENT_URI, item.getId()));
intent.setClassName(at.getPackageName(), at.getViewStreamItemActivity());
startActivity(intent);

我该如何解决这个问题?我做错了什么?

最佳答案

除非您特别要求,否则 PendingIntent 不允许填写组件。

PendingIntent pendingIntent = PendingIntent.getActivity(context,
0, intent, Intent.FILL_IN_COMPONENT);

请注意,这与其他 FILL_IN_* 标志的工作方式不同。

关于android - AppWidget setFillInIntent 无法处理 setData 或 componentName 中的数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12718731/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com