我正在尝试测试我的应用程序Widget,并在清单中注册了接收器,如下所示:
<receiver android:name=".MyUtilityWidget" android:label="@string/widget_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_config" />
</receiver>
MyUtility代码:
public class MyUtilityWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
my Main Code here.... (widget stuff)
}
我的小部件启动并执行一次(因此我将代码留在这里)。然而,广播接收器不工作,我没有收到任何广播。事实上,LogCat显示的意图永远不会被执行。因此,我的代码块仅在apk部署上执行一次,并且从不再执行(窗口小部件文本显示,但从未按照我的设置每30米更新一次)。
在这里配置......
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="146dip"
android:minHeight="72dip"
android:updatePeriodMillis="1800000"
android:initialLayout="@layout/widget_message"
/>
updatePeriodMillis也不能少于30分钟?这在调试时是一个非常烦人的问题,因为每次运行我都要等待大约30分钟以检查意图是否被触发!
任何帮助表示感谢。
答案 0 :(得分:1)
您需要通过RemoteViews抓住您的小部件并相应地进行更新。它不仅会自动更新。
尝试这样的事情:
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this
.getApplicationContext());
ComponentName thisWidget = new ComponentName(getApplicationContext(),
MyWidgetProvider.class);
int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);
final int N =allWidgetIds2.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = allWidgetIds2[i];
RemoteViews widgetView = new RemoteViews(getPackageName(), R.layout.widget_layout);
widgetView.setTextViewText(R.id.some_text_view, "some text");