如何从另一个活动启动Android AppWidget的配置活动?

时间:2012-04-20 03:10:58

标签: android configuration android-appwidget

这让我发疯了。我开发了一个App-widget。一切都很好。

我有一个配置活动,每次在主屏幕上添加一个小部件并且工作得很漂亮时启动。我保存每个小部件ID等的用户设置。

小部件有一些按钮,其中一个按钮启动了一个带有关于信息的活动,即“关于活动”。

“关于活动”有一个按钮,我想用它来启动启动“关于活动”的窗口小部件ID的配置活动。我想这样做的原因是因为我希望用户能够配置我的小部件的任何实例的内容,而无需将其删除并再次添加(为了启动配置活动)。

配置活动需要AppWidgetManager.EXTRA_APPWIDGET_ID来创建作业(保存此特定widgetid的用户设置)所以当我从另一个活动中调用它时,我必须以某种方式传递这个额外的。显而易见的想法就是:

startActivity(new Intent(context,act_configure.class).putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, ??? ));

现在我的问题是widgetid在哪里?我发现了一百万种获取widgetids(数组)的方法,但没有一条关于如何获得启动“关于Activity”的特定widgetid的线索

任何有关这方面的帮助都会使我花费的时间来寻找解决方案,值得一试。提前谢谢。

P.S。请原谅我的英语,因为他们不是我的母语......

2 个答案:

答案 0 :(得分:1)

您如何设置小部件视图?我有一个应用程序,我迭代活动小部件并配置设置RemoteView那里。您可以在附加到"关于"的onClick上设置您的小部件ID。按钮。

final AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);
final ComponentName widgetName = new ComponentName(this, WidgetProvider.class);

final int[] widgetIds = widgetManager.getAppWidgetIds(widgetName);

for (int widgetId : widgetIds) {
    final RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget);

    // This is the important part :-D
    remoteViews.findViewById(R.id.your_about_button).setOnClickListener(... a listener to start your about activity that puts the widget id in the extra like you suggest in your question ...);

    widgetManager.updateAppWidget(widgetId, remoteViews);
}

答案 1 :(得分:1)

感谢Cory Chaltron这里解决了我的问题。

在小部件提供程序onUpdate方法中,我应该创建一个“唯一”意图,以传递给处理about活动启动的待定意图。由于Android比较Intents的方式,在额外内容中传递WidgetID不够,您还应该将其作为数据传递给intent,以便是唯一的。所以这是代码:

Intent aboutIntent = new Intent(cx, act_about.class);
aboutIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetIds[i]);
// Make this unique for this appWidgetId
aboutIntent.setData(Uri.withAppendedPath(Uri.parse("customuri://widget/id/"), String.valueOf(widgetID)));
PendingIntent aboutPendingIntent = PendingIntent.getActivity(cx, 0, aboutIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.cmdabout, aboutPendingIntent)

虽然我回答了我自己的问题,但我不接受它,因为它是基于Cory的答案。谢谢大家的帮助......