【发布时间】:2011-01-23 02:22:00
【问题描述】:
我正在尝试创建一个应用小部件,当按下该小部件时,它会触发一个后台作业,将时间和位置保存到数据库中。
从我目前收集到的信息来看,我可能想要的设置包括一个 AppWidgetProvider 子类,它的 onUpdate() 负责在 RemoteView 上设置一个 PendingIntent 代表小部件按钮。它的 onReceive() 方法会捕获来自 PendingIntent 的广播,我可能会从这里启动一个服务来执行后台作业。
如果到目前为止我走在正确的轨道上,我面临一个挑战,那就是在将应用小部件添加到桌面时不会触发 onUpdate(),因此小部件按钮没有正确设置(它最终什么都不做)。我是否必须使用配置活动设置小部件,这反过来会触发 AppWidgetProvider.onUpdate(),还是有更简单的解决方案?
如果我根本没有走在正确的轨道上,任何指向实现我想要实现的目标的更好方法的指针都将非常感激。 :)
更新:
我想我也可以在这里发布一些代码。这是清单中的接收器定义:
<receiver android:name=".widget.QuickAddWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/quickadd_widget_info" />
</receiver>
这是我的资源文件,定义小部件:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="72dp"
android:minHeight="72dp"
android:initialLayout="@layout/quickadd_widget"
android:updatePeriodMillis="0">
</appwidget-provider>
这是 QuickAddWidgetProvider:
public class QuickAddWidgetProvider extends AppWidgetProvider {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("QuickAdd", "onReceive()");
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.v("QuickAdd", "onUpdate()");
}
}
【问题讨论】: