gpt4 book ai didi

android - 为什么主屏幕上有一个隐藏的 appWidget?

转载 作者:行者123 更新时间:2023-11-29 18:05:44 25 4
gpt4 key购买 nike

从主屏幕删除我的最后一个 appWidget 实例后,onDisabledonEnabled 不工作。

我将我的小部件注册为广播接收器,主屏幕上没有实例但广播接收,而且我看到我的日志写在我的 appWidget 核心类中!

卸载我的应用程序并重新安装后,问题解决了,onDisabledonEnabled 在添加(删除)第一个(最后一个)实例后正常工作。

我手动收集了 appWidgetIds 并将其保存在一个文件中,以提供一些更好的方法来访问我所有的小部件 ID,但是隐藏的 appWidget 并没有从我收集的小部件 ID 中删除,并且还存在于主屏幕中!

问题:

问题是 Android 版本 2.3.4(测试设备)上的错误吗?在这种情况下,解决方案是什么?

重要部分代码:

@Override
public void onEnabled(Context context) {
G.logger.out("Enabled");
super.onEnabled(context);
}


@Override
public void onDisabled(Context context) {
super.onDisabled(context);
G.logger.out("Disabled");
File file = new File(G.infoDir + "/" + getClass().getSimpleName() + ".dat");
if (file.exists()) {
file.delete();
}
}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
WidgetProperty property = G.widgetPropertyMap.get(getClass().getSimpleName());
property.appWidgetIds = appWidgetIds;

addWidgetIds(appWidgetIds, getClass().getSimpleName()); // add widget ids to a file ( duplicates will skip )
updateAll(getClass(), context);
}

@Override
public void onDeleted(Context context, int[] appWidgetIds) {
G.logger.out("Deleted");
removeWidgetIds(appWidgetIds, getClass().getSimpleName()); // remove widget ids from file
}

最佳答案

Android 中 AppWidgets 的设计非常糟糕。

要重现错误:

  • 选择小工具(放在主屏幕上)
  • 选择返回(硬件键)取消放置小部件
  • 现在您已经隐藏了小部件。

我包含了 setResult(RESULT_CANCELED); 来防止这个问题,但不会被 android 框架处理!!!

所以我使用这段代码作为一个愚蠢的解决方案:

@Override
protected void onDestroy() {
if ( !submitted) {
AppWidgetHost host = new AppWidgetHost(this, 1);
host.deleteAppWidgetId(mAppWidgetId);
}
}

关于android - 为什么主屏幕上有一个隐藏的 appWidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13507035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com