您好我正在编写一个锁定屏幕小部件,它是不同的按钮和显示信息的文本,小部件在添加或“最大化”或“最小化”时工作正常(全屏或半屏模式解锁)当手机刚打开时,问题是当手机出现一段时间然后按钮没有做任何事情,我读了很多关于它的帖子,但我没有发现我的问题。 我有CyanogenMod 11 [4.4.2]
<receiver
android:name="com.example.widget"
android:label="magicButtons" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_provider" />
</receiver>
<receiver android:name="com.example.widgetReciber">
<intent-filter>
<action android:name="updateW"/>
</intent-filter>
</receiver>
Widget.java(不完全是这样):
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
//Upgrade buttons
}
@Override
public void onUpdate(Context context,AppWidgetManager appWidgetManager, int[] appWidgetIds){
super.onUpdate(context,appWidgetManager,appWidgetIds);
//Upgrade buttons
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
}
答案 0 :(得分:0)
有点晚了,但经过几个小时的调试后我才发现解决方案(在互联网上似乎没有任何地方^^)。每当您锁定手机并且锁屏小部件处于折叠状态时,Android显然会调用onAppWidgetOptionsChanged()。这将重新创建您的小部件。
为了防止您的小部件变得无法使用,您必须像在onUpdate()中那样执行相同的操作。
示例:
public void onUpdate(Context context, AppWidgetManager manager,
int[] appWidgetIds) {
for(int a = 0; a < appWidgetIds.length; a++) {
manager.updateAppWidget(appWidgetsIds[a], createWidget());
}
}
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager manager,
int appWidgetId, Bundle widgetOptions) {
manager.updateAppWidget(appWidgetId, createWidget());
}
private RemoteViews createWidget() {
//Create your Widget (aka RemoteViews) here! You might want to pass
//needed variables for creating the widget ;)
}