You are welcome.

It really is non-intuitive. I had reports from my users about widget intermittently not responding to clicks, but didn't know how to approach it.

Finally, after buying a Moto Milestone, I saw that my widget got completely screwed up every time I pulled out the keyboard and the orientation changed. That gave me a good reproducible case to investigate.

Anyway, good luck.

-- Kostya

29.05.2010 14:09, Dirk Vranckaert пишет:
Kostya,

at first sight, that helped!
Thanks a lot for pointing me that out!

Greetz..

Dirk

On 29 mei, 11:04, Kostya Vasilyev<[email protected]>  wrote:
Dirk,

This is the reason your widget sometimes stops responding to clicking.

Each and every RemoteViews update needs to specify complete state,
including data and PendingIntents (if any). The home screen process can
be bumped out of memory, and Android uses the most recent RemoteViews to
recreate widgets. If it's incomplete and only contains text updates,
then pending intents will be lost.

Same thing happens on orientation changes - there is no onUpdate(), just
the mechanism described above.

-- Kostya

2010/5/29 Dirk Vranckaert<[email protected]>



I think String is right about that. I wouldn't do that either just to
save battery life!
However I think it is better to set the update interval of the applet
to a high enough amount of time (like 24 hours or sth) and just update
the widget manually. I'm currently working on a widget to and in my
case the widget only receives an update upon clicking a certain
button.
The way I do that is like this:
RemoteViews rv = new RemoteViews(context.getPackageName(), WIDGET);
rv.setTextViewText(R.id.textField, "Updated value for some text on the
widget");
ComponentName cn = new ComponentName(context, YourActivity.class);
AppWidgetManager mgr = AppWidgetManager.getInstance(context);
mgr.updateAppWidget(cn, rv);
That should basically work to update a widget.
Oh and one tip: using the this method you should do all updating just
after the line "rv.setTextViewText(...)". If you execute this entire
block a few times after each other you can get into troubles when
updating the widget.
Dirk
On 28 mei, 23:40, String<[email protected]>  wrote:
Before you get too far into this, you need to be aware that the widget
architecture isn't designed to update that frequently. There's a lot
of overhead, and updating every ten seconds will seriously impact
battery life. As will having a service continually running in the
background, for that matter.
It's a cool idea but I'm not sure it's well suited for a widget,
unfortunately.
String
On May 28, 2:43 pm, "[email protected]"<[email protected]>  wrote:
I am currently learning about widgets in Android.
I want to create a WIFI widget that will display the SSID, the RSSI
(Signal) level.
But I also want to be able to send it data from a service I am running
that calculates the Quality of Sound over wifi.
Here is what I have after some reading and a quick tutorial:
---
     public class WlanWidget extends AppWidgetProvider{
         RemoteViews remoteViews;
         AppWidgetManager appWidgetManager;
         ComponentName thisWidget;
         WifiManager wifiManager;
         public void onUpdate(Context context, AppWidgetManager
appWidgetManager,
                         int[] appWidgetIds) {
                         Timer timer = new Timer();
                         timer.scheduleAtFixedRate(new
WlanTimer(context, appWidgetManager),
1, 10000);
         }
         private class WlanTimer extends TimerTask{
                         RemoteViews remoteViews;
                         AppWidgetManager appWidgetManager;
                         ComponentName thisWidget;
         public WlanTimer(Context context, AppWidgetManager
appWidgetManager)
{
                         this.appWidgetManager = appWidgetManager;
                         remoteViews = new
RemoteViews(context.getPackageName(),
R.layout.widget);
                         thisWidget = new ComponentName(context,
WlanWidget.class);
                         wifiManager =
(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
         }
         @Override
         public void run() {
remoteViews.setTextViewText(R.id.widget_textview,
                         wifiManager.getConnectionInfo().getSSID());
                         appWidgetManager.updateAppWidget(thisWidget,
remoteViews);
         }
         }
---
The above seems to work ok, it updates the SSID on the widget every 10
seconds.
However what is the most efficent way to get the information from my
service that will be already running to update periodically on my
widget?
Also is there a better approach to updating the the widget rather than
using a timer and timertask? (Avoid polling)
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]<android-developers%2Bunsubs 
[email protected]>
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


--
Kostya Vasilev -- WiFi Manager + pretty widget -- http://kmansoft.wordpress.com

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

Reply via email to