0

I can't update the widget when is in charging state. The battery level stay the same. What is wrong in my code?

public class BatteryStatusWidgetActivity extends AppWidgetProvider {
    /** Called when the activity is first created. */
    private String batteryLevel = "init";
    private String temperatura = "init";
    private int widgetImageFrame = R.drawable.full;

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        context.getApplicationContext().registerReceiver(this,
                new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        updateView(context);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().contentEquals(
                "com.sec.android.widgetapp.APPWIDGET_RESIZE")
                || intent.getAction().equals(
                        "android.appwidget.action.APPWIDGET_UPDATE_OPTIONS")) {
        } else {
            int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
            int level = -1;
            level = (rawlevel * 100) / scale;
            batteryLevel = level + "%";
            // temperatura
            int temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,
                    -1) / 10;
            temperatura = temperature + "°C";
            widgetImageFrame = R.drawable.full;
            updateView(context);
        }
        super.onReceive(context, intent);
    }

    public void updateView(Context context) {
        RemoteViews thisViews = new RemoteViews(context.getApplicationContext()
                .getPackageName(), R.layout.widget_layout);
        thisViews.setTextViewText(R.id.widget_text, batteryLevel + " | "
                + temperatura);
        thisViews.setImageViewResource(R.id.imageView1, widgetImageFrame);
        ComponentName thisWidget = new ComponentName(context,
                BatteryStatusWidgetActivity.class);
        AppWidgetManager.getInstance(context).updateAppWidget(thisWidget,
                thisViews);
    }
}

This is the main of widget

<?xml version="1.0" encoding="utf-8" ?> 
  <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget_layout" android:minWidth="40dp" android:minHeight="40dp" android:updatePeriodMillis="3000" />

So what is the problem? android:updatePeriodMillis="3000"?

David_D
  • 1,404
  • 4
  • 31
  • 65
  • are u sure? i write a project use your code,it works fine... – Bi Qin Aug 23 '13 at 10:50
  • Many people tells me that the widget doesn't update. In my case for example, it works fine.. I don't know why. Maybe make a service it's better. – David_D Aug 23 '13 at 12:10

1 Answers1

0

The updatePeriodMillis attribute defines how often the App Widget framework should request an update from the AppWidgetProvider by calling the onUpdate() callback method.

from http://developer.android.com/guide/topics/appwidgets/index.html#MetaData

Bi Qin
  • 61
  • 3