gpt4 book ai didi

android - WidgetProvider onDisable、onDeleted 未调用

转载 作者:行者123 更新时间:2023-11-30 02:59:44 26 4
gpt4 key购买 nike

在我的小部件中,我启动了 Timer。它工作正常,一切正常。但是,如果我从主屏幕中删除小部件,则不会调用 onDisable 或 onDeleted。

我尝试使用 onReceive,但我的 Log.i() 只提供 onUpdate。

@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);
Log.i("onReceive", intent.getAction());
}

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
timer = new Timer();
timer.scheduleAtFixedRate(new TasksView(context, appWidgetManager), 100, 5000);
[...]
}

另外,我有:

@Override
public void onDeleted(Context context, int[] appWidgetIds)
{
super.onDeleted(context, appWidgetIds);
Log.i("MyTag", "onDeleted");
}

@Override
public void onDisabled(Context context)
{
super.onDisabled(context);
Log.i("MyTag", "onDisabled");
}

和:

<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
<action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
<action android:name="com.opennet.supportportal.UPDATE_LIST_WARN" />

那么,我怎样才能停止我的计时器呢?为什么不调用 onDisable 或 onDeleted?

最佳答案

android 1.5有一个bug,就是没有调用onDeleted方法。下面放置在 onRecive 中的代码修复了这个问题。

@Override
public void onReceive(Context context, Intent intent)
{
final String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);

if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[] { appWidgetId });
}
} else {
super.onReceive(context, intent);
}
}

More info here

关于android - WidgetProvider onDisable、onDeleted 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22730502/

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