получение BATTERY_CHANGED flg=0x60000010 (есть дополнения) при попытке что-то сделать, когда батарея находится на определенном уровне

Я пытаюсь изменить текст TextView, когда батарея находится на определенном уровне, но когда это произошло, вместо этого я получил ошибку, ошибка

java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.BATTERY_CHANGED flg=0x60000010 (has extras) } in famium.fokus.fhg.de.monitoringthebatterylevelandchargingstate.MainActivity$1@4139cca8

и вот мой код, который я прокомментировал перед строками, вызывающими ошибку.

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        /*
            BatteryManager
                The BatteryManager class contains strings and constants used for values in the
                ACTION_BATTERY_CHANGED Intent, and provides a method for querying battery
                and charging properties.
        */
        /*
            public static final String EXTRA_SCALE
                Extra for ACTION_BATTERY_CHANGED: integer containing the maximum battery level.
                Constant Value: "scale"
        */
        // Get the battery scale
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1);
        // Display the battery scale in TextView
        mTextViewInfo.setText("Battery Scale : " + scale);

        /*
            public static final String EXTRA_LEVEL
                Extra for ACTION_BATTERY_CHANGED: integer field containing the current battery
                level, from 0 to EXTRA_SCALE.

                Constant Value: "level"
        */
        // get the battery level
        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
        // Display the battery level in TextView
        mTextViewInfo.setText(mTextViewInfo.getText() + "\nBattery Level : " + level);

        // Calculate the battery charged percentage
        float percentage = level/ (float) scale;
        // Update the progress bar to display current battery charged percentage
        mProgressStatus = (int)((percentage)*100);

        // Show the battery charged percentage text inside progress bar
        mTextViewPercentage.setText("" + mProgressStatus + "%");

        // Show the battery charged percentage in TextView
        mTextViewInfo.setText(mTextViewInfo.getText() +
                "\nPercentage : "+ mProgressStatus + "%");

        // Display the battery charged percentage in progress bar
        mProgressBar.setProgress(mProgressStatus);

        String action = intent.getAction();
        if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
            IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
            Intent batteryStatus = context.registerReceiver(null, ifilter);

            int level1 = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            int scale1 = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
            int percent = (level1*100)/scale1;
 // here the lines that causes the error
            if (percent >= 97) {
                _textView2.setText(percent);
            }
        }
    }
};

Я пытался следовать этому сообщению https://stackoverflow.com/a/10910024/9308420, но я не знаю, что такое неправильно.


person Salem Masoud    schedule 04.02.2018    source источник
comment
Просто хочу отметить, что, хотя это, скорее всего, не решит вашу проблему, вы столкнетесь с другой после того, как эта будет исправлена. Вы не можете ничего обновить в пользовательском интерфейсе, не находясь в потоке пользовательского интерфейса. По умолчанию, когда это вызывается, вы больше не будете в потоке пользовательского интерфейса (поскольку получатели широковещательной рассылки не ждут в потоке пользовательского интерфейса, чтобы получить свою широковещательную рассылку, что может вызвать ошибку Это приложение остановлено). Вам нужно будет каким-то образом обработать это, чтобы обновить TextView.   -  person miversen33    schedule 04.02.2018
comment
Кроме того, я думаю, нам нужно будет посмотреть, где вы это реализовали (где вы установили широковещательный приемник). Наконец, опубликуйте всю ошибку logcat, пожалуйста. Ошибка, которая у вас есть, не имеет ничего общего с установкой текстового представления с целым числом. Я предполагаю, что ошибка возникает за несколько строк до того, как вы пытаетесь получить дополнительные сведения о намерении, которое вы получаете. Извините за несколько комментариев, но это не ответ, и он был слишком длинным, чтобы быть одним комментарием.   -  person miversen33    schedule 04.02.2018
comment
Я понял это после прочтения этого сообщения stackoverflow.com/a/23791368/9308420. Я разместил ответ для более подробной информации.   -  person Salem Masoud    schedule 04.02.2018


Ответы (1)


Я понял это после прочтения этого поста

https://stackoverflow.com/a/23791368/9308420

так, вместо

_textView2.setText(percent);

Изменился на

_textView2.setText("" + percent);
person Salem Masoud    schedule 04.02.2018