如何向特定appwidget广播意图?

时间:2010-10-31 10:28:06

标签: android android-widget android-intent

我正在创建一个需要在特定时间间隔内更新的appwidget。我为此使用了AlarmManager

我想让警报在onUpdate()中运行AppWidgetProvider方法。

    //Create the intent
    Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);              

    //Schedule the alarm        
    AlarmManager manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    manager.setRepeating(AlarmManager.RTC, startAlarmCal.getTime().getTime(), 1000 * 60, pendingIntent);

但是,此意图会导致所有窗口小部件更新。我想以某种方式只将这个意图发送到我自己的appwidget。我该怎么做?

3 个答案:

答案 0 :(得分:6)

使用自定义Intent发送到您的小部件。您可以在manifest.xml中注册它们。如果您有许多不同的窗口小部件ID,则无法更新特定窗口小部件ID,但不能更新。

<receiver
        android:name=".widget.WidgetProvider"
        android:label="1x1">
        <service
            android:name=".extra.WidgetProvider$WidgetUpdateService1x1" />
        <intent-filter>
            <action
                android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            <action
                android:name="nitro.blub.APPWIDGET_MANUEL_UPDATE" />
        </intent-filter>
        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/widget_info" />

    </receiver>

答案 1 :(得分:0)

您可以尝试添加此内容(稍加修改以满足您的需求):

// Change the text in the widget
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.main);
ComponentName thisWidget = new ComponentName(context, [Calling_class].class);

// Run update code here. e.g: //////////////
updateViews.setTextViewText(R.id.text, now);
////////////////////////////////////////////

appWidgetManager.updateAppWidget(thisWidget, updateViews);

希望这有帮助。

答案 2 :(得分:-1)

再次it's all in the documentation

  

updatePeriodMillis此AppWidget要更新的频率(以毫秒为单位)