Android onEnabled/onDisabled 从未调用过
Posted
技术标签:
【中文标题】Android onEnabled/onDisabled 从未调用过【英文标题】:Android onEnabled/onDisabled never called 【发布时间】:2013-04-12 01:14:02 【问题描述】:我在触发 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>
Provider_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);
感谢任何帮助。谢谢!
【问题讨论】:
【参考方案1】:好的,从手机中删除我的应用就行了。不明白为什么卸载修复它。如果任何人遇到同样的问题,请卸载并重新安装您的应用。
【讨论】:
我遇到了类似的问题,这对我有用。我敢打赌,小部件与系统的联系更深,重新安装不会影响行为。感谢您的提示! 它也对我有用,但为什么呢?当我通过AndroidStudio
在设备上安装我的应用程序进行测试时,我有时遇到了这个问题。我也把所有的 require intent-filter
s 但我有时会看到这个问题,它又需要 uninstall
+ reinstall
。【参考方案2】:
我知道这是一篇旧帖子,但似乎问题出在onReceive(Context context, Intent intent)
方法上。
看起来,它优先处理接收者的事件,防止AppWidgetProvider
的指定方法在接收到动作时被调用。
有两种可能的解决方案;要么在onReceive
方法中处理intent 的动作,要么删除该方法并覆盖指定的动作方法。
不要忘记在意图过滤器中包含操作。
【讨论】:
在你的onReceive中,你需要先调用super方法,以便对onEnabled、onDisabled等进行dispatch @lukas 是的,是的,是的!调用super.OnReceive
成功了!以上是关于Android onEnabled/onDisabled 从未调用过的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )