小部件ID和意图

时间:2013-05-07 23:30:06

标签: java android eclipse widget

我已经使用AppWidgetManager设置了一个小部件,它有一个configure activity,一旦我在活动上按done,根据我的选择,小部件的外观会发生变化。当我点击小部件时,再次显示configure activity。这一切都很好并且有效,但是如果我杀死小部件,使用第三方任务管理器或Android的任务列表,(当你按下主页按钮,然后出现应用程序列表时),轻扫configure activity ,真的很奇怪。我可以点击Widget和configure activity显示,但是当我在那里按done时,小部件上没有任何反应。我需要删除它才能工作。

//Somewhere at the top (global variable)
int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;

....

Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
    mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
}

if (mAppWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
    Intent resultValue = new Intent();
    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    setResult(RESULT_OK, resultValue);
}

finish();

....
//Then in my Widget, I set the PendingIntent for tapping the RemoteViews
Intent intent = new Intent(oContext, Widget_Configure.class);

for (int c = 0; c < oAppWidgetIds.length; c++){
     rv.setInt(R.id.widget_relative_layout, "setBackgroundColor", Color.argb(alpha, red, green, blue));             
     PendingIntent pendingIntent = PendingIntent.getActivity(oContext, oAppWidgetIds[c], intent, PendingIntent.FLAG_UPDATE_CURRENT );                           

     rv.setOnClickPendingIntent(R.id.borderBottomLeft, pendingIntent);
     rv.setOnClickPendingIntent(R.id.borderBottomRight, pendingIntent);
     rv.setOnClickPendingIntent(R.id.borderTopLeft, pendingIntent);
     rv.setOnClickPendingIntent(R.id.borderTopRight, pendingIntent);
     rv.setOnClickPendingIntent(R.id.widget_relative_layout, pendingIntent);

     oAppWidgetManager.updateAppWidget(oAppWidgetIds[c], rv);
}

//oContext is global Context, when Widget starts oContext is set to `this`;

我怎样才能这样做,即使小部件被杀死,我也不必删除小部件,如果可能的话,让它自己重启。

感谢。

1 个答案:

答案 0 :(得分:1)

没关系,我自己想出来了,谢谢你.. =]

编辑:我如何完成......

我在Widget上运行了工作线程,并使用任务管理器阻止了它们。所以我意识到我需要重新启动Widget,(调用OnUpdate方法(重启,因为我的小部件会启动线程并设置AppWidgetManager和其他东西

看起来好像我的配置活动会启动而不管窗口小部件被杀死的事实,我只是强迫窗口小部件在按钮的OnClick事件中更新。

我需要保存首次调用Widget的OnUpdate方法时创建的AppWidgetIds。

这是按钮的OnClick事件中的代码:

Intent updateWidgetIntent = new Intent(Context, <WIDGET_CLASS>.class);
updateWidgetIntent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
// Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that:
int ids[] = {mAppWidgetId};
updateWidgetIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(updateWidgetIntent);

其中mAppWidgetId是AppWidgetIds的数组(以前保存过的地方)。

我希望这是有道理的......