我正在为可以发送和接收数据短信的小部件(图像按钮)编写代码,接收有效数据短信将改变它的图标并再次点击将重置它,我可以拥有相同小部件的多个实例在屏幕上配置。
问题是:当主屏幕从后台恢复时,小部件停止响应用户点击,但它仍然检测传入的数据短信并更新图标。
我认为问题可能是pendingIntent(我不确定在getBroadcast中使用的最佳标志)它是在我的updateAppWidget方法中创建的:
Intent active = new Intent(context, AppWidget.class);
active.setAction(ACTION + String.valueOf(appWidgetId)); //action should look like this: "CLICKED_123"
PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, rc, active, 0); //rc is the first id of each single instance of the widget
views.setOnClickPendingIntent(R.id.imageButton, actionPendingIntent);
我还发现,当小部件进入后台时,它会被销毁并再次使用不同的id创建,这是真的吗? 如果是,问题可能与我的savedPreferences有关:
static void saveStatePref(Context context, int appWidgetId, int text) {
SharedPreferences.Editor prefs = context.getSharedPreferences(STAT_NAME, 0).edit();
// here i use the widget id to save my preferences
// so that i can tell how to update every single instance
prefs.putInt(PREF_PREFIX_KEY + appWidgetId, text);
prefs.apply();
}
是否有更好的方法可以保存首选项并提供请求代码而无需转发其ID? 我找不到类似的东西,我决定发布这个问题。 对不起我的英文,请随时编辑。