使用 BroadcastReceiver 监视 BATTERY_CHANGED 并使用级别列表显示不起作用
大家好,我一直坚持这个问题,但我看不到我的错误。我之前基本上使用过将不同的可绘制对象绑定到特定级别,但是我尝试在监视电池变化的 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"/>
Hello everyone I've been stick with this problem, and I can't see my mistake. I had used before basicly for having different drawable bind to a specific level, nevertheless I am trying to use it within a BroadcastReceiver wich monitor battery changes, the problem is that I don't get any UI update when I called the setImageLevel change?
The Broadcast Receiver goes like this
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());
}
}
The Log gets displayed but it does not change my ImageView if you can point me out in the right direction, or you have any insight on this issue?
Little bit of more info
Here is my Registration and unregistration both on the same activity as the 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);
}
How do I instatiate the ImageView Drawable:
<ImageView
android:id="@+id/imageBatery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/battery_status" />
And also battery_status.xml is a drawable (I removed some of the drawable item because you get the idea I have from 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"/>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的
Activity
中是否内嵌了BroadcastReceiver
?如果是这样,请使用 'MyActivity.this.runOnUiThread()` 方法来更改您的视图。Do You have your
BroadcastReceiver
inlined in YourActivity
? If so, use 'MyActivity.this.runOnUiThread()` method to change Your views.您的问题出在图像中,
当级别更改时,
LevelListDrawable
不会附加新图像,它只是显示您设置的级别的图像尝试不同的图像,您会看到什么我是说
your problem is in images
LevelListDrawable
doesn't append new image when level changed, it just shows the image for level you've settry differen images and you'll see what I mean
在你的 onCreate 中试试这个:
是否改变了?
try this in your onCreate:
is smth changed ?