>>>>> "KV" == Kostya Vasilyev <kmans...@gmail.com> writes:

   KV> See below:
   KV> 21.03.2011 21:37, Jake Colman пишет:
   >>>>>>> "KV" == Kostya Vasilyev<kmans...@gmail.com>  writes:

   KV> 21.03.2011 17:01, Jake Colman пишет:
   >> >>  1) How does one provide multiple options for widget sizes?  Do
   >> >>     you just add additional meta-data sections under the
   >> >>     Receiver entry of the manifest?
   >> 
   KV> Essentially by providing entirely separate widgets, each having
   KV> its own size. They can share implementation (Java code,
   KV> drawables, layouts), but they should be declared as separate
   KV> widgets as seen by Android.
   >> 
   >> How does one declare them "as separate widgets as seen by
   >> Android"?  Again, we are talking about a single project (apk) with
   >> one manifest, correct?  So how do you modify the manifest to
   >> indicate that is more than one widget?

   KV> Same as declaring one widget, but repeating as necessary:

   KV> <receiver android:name=".MyWidget_3x1"
   KV> android:label="@string/widget_name_3x1">
   KV> <intent-filter> ... </>
   KV> <meta-data
   KV>                 android:name="android.appwidget.provider"
   KV>                 android:resource="@xml/widget_info_3x1" />
   KV> </receiver>

   KV> and then

   KV> <receiver android:name=".MyWidget_2x1"
   KV> android:label="@string/widget_name_2x1">
   KV> <intent-filter> ... </>
   KV> <meta-data
   KV>                 android:name="android.appwidget.provider"
   KV>                 android:resource="@xml/widget_info_2x1" />
   KV> </receiver>

   KV> The key part is that this lets you reference two distinct
   KV> xml/widget_info_3x1 and xml/widget_info_2x1.

   KV> This is important because those specify android:minWidth and
   KV> android:minHeight, which can't be changed at runtime.

Ah.  So even though I am defining multiple receivers, they all share
everything else?  Can the service know what kind of widget it's
updating?  Will they also share instances?  In other words, if install both a
2x1 widget and a 1x1 widget on the same homescreen, will it be
considered two instances of one widget or two different widgets?  I
would expect the answer to this makes a big difference as to how I do my
processing.

   >> >>  2) How does one set options that are unique to a given
   >> >>     instance?  The app currently uses SharedPreferences for all
   >> >>     of its configuration.  But if both instances are running in
   >> >>     the same context, how can each widget know how it is
   >> >>     configured as distinct from another instance?
   >> 
   KV> Widget ids are persistent until a widget is removed. Store values
   KV> in shared preferences (or some other persistence mechanism) keyed
   KV> by widget id.

   >> 
   >> Hmmmm.  Using that standard SharedPreferences, I did not see that it
   >> could be keyed.  Did I miss that?  Each piece of configuration data is,
   >> of course, keyed by the name of that piece of data.  But how would I
   >> distinguish between the configuration data of two different widgets if
   >> they are all stored in the same SharedPreferences?

   KV> String key = "Blah" + String.valueOf(widgetId);
   KV> prefs.getInt(key, 0);

   KV> etc, etc etc.

   >> >>  3) The app uses a service that is started by an alarm in order
   >> >>     to do the updating.  When the alarm is triggered, the
   >> >>     service calculates the time remaining until the event and
   >> >>     then it updates the remote view.  Do both widgets share the
   >> >>     same service?  I'd that is the case since it all one app
   >> >>     with just multiple widget instances.  If that's the case,
   >> >>     how can the service know which widget it is updating?
   >> 
   KV> Use
   >> 
   KV> AppWidgetManager.updateAppWidget(int widgetId, RemoteViews views)
   >> 
   KV> to update only one particular widget.
   >> 
   KV> You can get the ids when needed outside onUpdate like this:
   >> 
   KV> AppWidgetManager manager = AppWidgetManager.getInstance(context);
   KV> ComponentName widgetClassName = new ComponentName(context,<your
   WidgetProviderClass> );
   KV> int[] widgetIds = manager.getAppWidgetIds(widgetClassName);
   >> 
   KV> Be aware that in some cases, there may be widget ids that refer to
   KV> non-existent widgets.
   >> 
   KV> I documented my workaround for this issue here:
   >> 
   KV> 
http://kmansoft.wordpress.com/2010/06/22/per-widget-options-stale-widgets/
   >> 
   >> And then the service would have to "ask" that instance which type of
   >> data (sunrise or sunset) it should be updating.  But how to ask that
   >> question?

   KV> You can let the user specify this in the widget's configuration activity,
   KV> then store that setting in SharedPrefs, and retrieve as needed.

   KV> -- 
   KV> Kostya Vasilyev -- http://kmansoft.wordpress.com

   KV> -- 
   KV> You received this message because you are subscribed to the Google
   KV> Groups "Android Developers" group.
   KV> To post to this group, send email to android-developers@googlegroups.com
   KV> To unsubscribe from this group, send email to
   KV> android-developers+unsubscr...@googlegroups.com
   KV> For more options, visit this group at
   KV> http://groups.google.com/group/android-developers?hl=en

-- 
Jake Colman -- Android Tinkerer

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to