【问题标题】:Why widget doesn't update?为什么小部件不更新?
【发布时间】:2013-08-22 08:49:35
【问题描述】:

处于充电状态时,我无法更新小部件。电池电量保持不变。我的代码有什么问题?

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);
    }
}

这是小部件的主要部分

<?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" />

那么问题是什么? android:updatePeriodMillis="3000"?

【问题讨论】:

  • 你确定吗?我用你的代码写了一个项目,效果很好……
  • 很多人告诉我小部件没有更新。例如,就我而言,它工作正常。我不知道为什么。也许做一项服务会更好。

标签: android android-widget updates android-appwidget


【解决方案1】:

updatePeriodMillis 属性定义了 App Widget 框架通过调用 onUpdate() 回调方法向 AppWidgetProvider 请求更新的频率。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2018-08-29
    • 1970-01-01
    • 2017-05-10
    • 2011-05-24
    • 2014-05-14
    • 2012-01-06
    相关资源
    最近更新 更多