0

大家好,我一直坚持这个问题,我看不到我的错误。我以前基本上用于将不同的可绘制绑定到特定级别,但是我试图在 BroadcastReceiver 中使用它来监控电池变化,问题是当我调用 setImageLevel 更改时我没有得到任何 UI 更新?

广播接收器是这样的

public class BatteryReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(LOG, "Fired Changed");
        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);

        int percent = (level * 100) / scale;

        imageBattery = (ImageView) findViewById(R.id.imageBatery);
        imageBattery.setImageLevel(percent);
        Log.d(LOG, "On UI running I am");

        // imageBattery.getDrawable().mutate();
        // imageBattery.invalidate();

        // Log.d(LOG,"DRawable: "+((LevelListDrawable)imageBattery.getDrawable()).getCurrent());

    }

}

日志会显示,但如果你能指出我正确的方向,它不会改变我的 ImageView,或者你对这个问题有任何见解?

更多信息

这是我在与 BroadcastReceiver 相同的活动上的注册和注销

@Override
public void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.intent.action.BATTERY_CHANGED");
    registerReceiver(receiver, filter);
}

@Override
public void onPause() {
    super.onPause();
    unregisterReceiver(receiver);
}

如何实例化 ImageView Drawable:

<ImageView
            android:id="@+id/imageBatery"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/battery_status" />

而且 battery_status.xml 也是可绘制的(我删除了一些可绘制的项目,因为你从 0-100 得到了我的想法

<item
    android:drawable="@drawable/stat_sys_battery_100"
    android:maxLevel="100"/>

<item
    android:drawable="@drawable/stat_sys_battery_90"
    android:maxLevel="90"/>

<item
    android:drawable="@drawable/stat_sys_battery_80"
    android:maxLevel="80"/>

4

3 回答 3

0

你的问题出在图片上

LevelListDrawable级别更改时不会附加新图像,它只显示您设置的级别的图像

尝试不同的图像,你会明白我的意思

于 2011-12-27T10:00:32.337 回答
0

BroadcastReceiver在 Your 中有你的内联Activity吗?如果是这样,请使用“MyActivity.this.runOnUiThread()”方法更改您的视图。

于 2011-12-27T07:46:39.360 回答
0

在你的 onCreate 中试试这个:

    imageBattery = (ImageView) findViewById(R.id.imageBatery);
    for (int i = 0; i < 10; i++) {
        imageBattery.setImageLevel(i * 10);
    }

smth改变了吗?

于 2011-12-28T08:38:34.447 回答