大家好,我一直坚持这个问题,我看不到我的错误。我以前基本上用于将不同的可绘制绑定到特定级别,但是我试图在 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"/>