Мониторинг BATTERY_CHANGED с BroadcastReceiver и отображение с неработающим списком уровней - PullRequest
0 голосов
/ 27 декабря 2011

Привет всем, я придерживался этой проблемы, и я не вижу своей ошибки. Раньше я использовал в основном для различного рисования привязки к определенному уровню, тем не менее, я пытаюсь использовать его в BroadcastReceiver, который отслеживает изменения батареи, проблема в том, что я не получаю никакого обновления пользовательского интерфейса при вызове изменения setImageLevel? 1001 *

Приемник вещания работает следующим образом

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

Ответы [ 3 ]

0 голосов
/ 27 декабря 2011

ваша проблема в изображениях

LevelListDrawable не добавить новое изображение при изменении уровня, оно просто показывает изображение для установленного вами уровня

попробуйте разные изображения, и вы поймете, что я имею в виду

0 голосов
/ 28 декабря 2011

попробуйте это в вашем onCreate:

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

что-то изменилось?

0 голосов
/ 27 декабря 2011

Есть ли у вас ваш BroadcastReceiver встроенный в ваш Activity?Если это так, используйте метод MyActivity.this.runOnUiThread () `, чтобы изменить свои взгляды.

...