我已经使用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`;
我怎样才能这样做,即使小部件被杀死,我也不必删除小部件,如果可能的话,让它自己重启。
感谢。
答案 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的数组(以前保存过的地方)。
我希望这是有道理的......