设置小部件按钮以执行后台作业

时间:2011-01-22 00:06:35

标签: android android-widget

我正在尝试创建一个app小部件,当按下该按钮时,会触发一个后台作业,将时间+位置保存到数据库。

从目前为止我能够收集到的内容,我可能想要的设置包含一个AppWidgetProvider子类,其onUpdate()负责在表示widget按钮的RemoteView上设置PendingIntent。它的onReceive()方法将从PendingIntent捕获广播,我可能会从这里开始执行后台作业的服务。

如果到目前为止我处于正确的轨道上,我有一个挑战,即在将app小部件添加到桌面时不会触发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()");
    }
}

1 个答案:

答案 0 :(得分:1)

  

如果我到目前为止正确的方向

是!

  

我有一个挑战,就是在将app小部件添加到桌面时没有触发onUpdate(),因此小部件按钮没有正确设置(最终没有任何内容)

嗯,它应该。确保清单中的AppWidgetProvider条目有权<intent-filter>接收更新:

<receiver android:name=".AppWidget" android:label="@string/app_name" android:icon="@drawable/icon">
        <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>