Android中onEnabled/onDisabled从未被调用

5
我遇到了一个问题,无法触发AppWidgetReciever的onEnabled和onDisabled方法。我已经指定了动作,我也在onRecieve方法中记录了每个动作,但是我得到的只有“APPWIDGET_UPDATE”和“APPWIDGET_DELETED”两种动作。我已经在谷歌上搜索了解决方案,但是不幸的是没有找到。这是我的代码:
清单部分:
<receiver android:name=".ScheduleWidgetProvider" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
                <action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action android:name="android.appwidget.action.APPWIDGET_DELETED" /> 
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/provider_xml" />
        </receiver>

提供程序_xml:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="180dp"
    android:minHeight="40dp"
    android:updatePeriodMillis="60000"
    android:initialLayout="@layout/widget_layout"
    android:configure="org.zivkovic.schedule.ConfigurationActivity"
    >
</appwidget-provider>

ScheduleWidgetProvider:

public class ScheduleWidgetProvider extends AppWidgetProvider {
    {
        Log.w("Schedule", "ScheduleWidgetProviderRequested");
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.w("Schedule", "On recieve " + intent.getAction());
        super.onReceive(context, intent);
    }

    @Override
    public void onEnabled(Context context) {
        Log.w("Schedule", "OnEnabled called");
        ...
        super.onEnabled(context);
    }

    @Override
    public void onDisabled(Context context) {
        Log.w("Schedule", "OnDisabled called");

        ...

        super.onDisabled(context);
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        for (int i = 0; i < appWidgetIds.length; i++) {
            ....
        }
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }

}

任何帮助都受到赞赏。谢谢!
2个回答

9

好的,从手机上删除我的应用程序就解决了问题。无法理解为什么卸载会解决问题。如果有人遇到同样的问题,请卸载并重新安装您的应用程序。


我有一个类似的问题,而这个方法对我很有效。我猜是因为小部件与系统的联系更深,重新安装并没有影响这种行为。感谢你的提示! - pkk
1
它对我也起作用了,但为什么?当我通过AndroidStudio在设备上安装我的应用程序进行测试时,有时候会遇到这个问题。我还放置了所有必需的intent-filter,但有时候仍然会出现这个问题,需要再次进行“卸载”+“重新安装”。 - Ramin Bateni

2
我知道这是一篇旧文章,但似乎问题出在onReceive(Context context, Intent intent)方法上。
由于该方法优先处理接收器事件,因此阻止了AppWidgetProvider指定的方法在接收操作时被调用。
有两种可能的解决方案:一种是在onReceive方法中处理意图的动作,另一种是删除该方法并覆盖指定的动作方法。
不要忘记在意图过滤器中包含这些动作。

9
在你的onReceive方法中,你需要先调用super方法,以便将调度转到onEnabled、onDisabled等方法。 - lukasz
@lukas 是的,是的,是的!调用 super.OnReceive 就解决了问题! - AlexAndro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接