我已经制作了一个Android主屏幕小部件,它显示了一些文本并且有2个点击监听器,我在正常操作下工作,没有问题。这是直到HTC感知/启动器决定重新加载,这是大多数时间。重新加载后,其中一个单击侦听器停止工作,并可能导致窗口小部件强制关闭。
onClickListener 1 =启动一个活动并传递一些文本字符串
onClickListener 2 =触发FORCE_WIDGET_UPDATE
启动器重新加载后,活动仍然正常,但窗口小部件更新失败。
这是更新代码的本质。
public static String updateString = "org.software.appname.FORCE_WIDGET_UPDATE";
public void onReceive(Context ctx, Intent intent){
showIntent=intent.getAction();
Log.d(TAG, showIntent);
if (updateString.equals(intent.getAction())){
Log.d(TAG, "onReceive, Force");
AppName.updateViews = new RemoteViews( ctx.getPackageName(),R.layout.main );
<Code to update text, update widget view and load new intents>
ComponentName me = new ComponentName( ctx, AppName.class );
AppWidgetManager.getInstance( ctx ).updateAppWidget( me, updateViews );
} else super.onReceive(ctx, intent);
我已经尝试将onRecieve调用移动到if语句中的超类,但这会导致应用程序在窗口小部件被放到主屏幕上时强行关闭。
单击按钮时,我没有在logcat中看到任何内容,通常情况下,有时会强制关闭,有时则不会。我可以通过在应用程序设置中强制关闭股票启动器来重新创建桌面模拟器中的问题。
提前感谢您的帮助! : - )
编辑: 我试图通过在intent中传递appWidgetIds []然后在onReceive中触发onUpdate来改变现状,但这似乎没有做任何事情。我在logcat中收到消息说它正在注册点击,但它似乎没有触发onUpdate。
public void onReceive(Context ctx, Intent intent){
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(ctx);
int[] appWidgetIds = intent.getIntArrayExtra("appWidgetIds");
onUpdate(ctx, appWidgetManager, appWidgetIds);
Log.d(TAG, "onReceive log");
}