Автообноление activity android

328
03 октября 2017, 03:42

Есть приложение с выводом на экран текущего значения заряда батареи. Код:

public class MainActivity extends Activity {
    BroadcastReceiver batteryLevelReceiver = null;
    boolean batteryLevelRegistered = false;
    TextView battLevel;
    IntentFilter batteryLevelFilter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        batteryStat();
        registerReceiver(batteryLevelReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    }
    public void batteryStat() {
        battLevel = (TextView) findViewById(R.id.battery);
        batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                batteryLevelRegistered = false;
                int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                if (battLevel != null) {
                    String add_text = "";
                    if (plugged == BatteryManager.BATTERY_PLUGGED_AC) {
                        add_text = " AC";
                    } else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) {
                        add_text = " USB";
                    }
                    battLevel.setText(level + "%" + add_text);
                }
            }
            ;
        };
    }
}

Дело в том, что при запуске приложения оно показывает текущий заряд, но вот при длительной роботе, если заряд уменьшился скажем, приложение все равно показывает то значение, которое появилось при его запуске. То есть для того чтобы обновить значение заряда на экране, нужно закрыть и обратно запустить программу. Как сделать так, что приложение автоматически обновляло значение на экране, соответственно с зарядом батареи? Типа как в статусбаре.

Answer 1

Вы явно отписываетесь от обновлений в строчке context.unregisterReceiver(this);. Отписываться надо при завершении активити. В onStop или onDestroy или onPause - в зависимости от того, где подписываетесь на уведомления. Попробуйте перенести эту строку в onDestroy

READ ALSO
XWPFRuns and XWPFParagraph Apache POI помогите исправить

XWPFRuns and XWPFParagraph Apache POI помогите исправить

Добрый день, помогите исправить, суть такая есть исходный документ (шаблон) его нужно изменять, меняя часть шаблонного текста на нужную, но проблема...

422
Как переписать SQL запрос на criteria api?

Как переписать SQL запрос на criteria api?

SQL работает отлично и выводит все как нужноХочу переписать его на criteria api, я написал вот такой метод

227
Android - Удержание прав доступа

Android - Удержание прав доступа

Подскажите, есть раздел про то, как удержать права доступа, дескать сделать такое можно, но на примерах и на практике не нашел реализации,...

175