Получение информации об аккумуляторе Android программно

Я пытаюсь получить информацию о батарее, в основном оставшуюся мощность, напряжение, ток для устройства Android N (7.1.1). Я пытаюсь запустить следующий код в методе onCreate.

Первый подход;

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        batteryStatus = this.registerReceiver(null, ifilter);
        double currentNow = BatteryManager.BATTERY_PROPERTY_CURRENT_NOW;
        double voltage = BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE;
        double level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        double scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, 

Второй подход:

 BatteryManager mBatteryManager =
                (BatteryManager)Context.getSystemService(Context.BATTERY_SERVICE);
        Long energy =
                mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER);

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


person user2782345    schedule 28.02.2018    source источник


Ответы (1)


Вы пробовали что-то вроде этого:

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Get the battery scale
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE,-1);

        // get the battery level
        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);

    }
};

И в вашем методе создания:

IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);    
mContext.registerReceiver(mBroadcastReceiver,iFilter);
person Tarek    schedule 28.02.2018
comment
Что такое переменная mContext? - person user2782345; 28.02.2018
comment
@user2782345 user2782345 Скорее всего, он хранит контекст того места, где вы регистрируете широковещательный приемник. Таким образом, для действия вы можете заменить mContext на this (или просто вызвать registerReceiver без каких-либо предшествующих ему слов). - person pushasha; 28.02.2018
comment
Есть ли способ получить мощность, оставшуюся в телефоне, в нановатт-часах? ="nofollow noreferrer">developer.android.com/reference/android/os/ - person user2782345; 28.02.2018
comment
@user2782345 user2782345 Вы, вероятно, сделали бы это точно так же, как в своем вопросе (с помощью BatteryManager), но не вызывайте его из статического контекста. - person pushasha; 28.02.2018
comment
@pushasha Я не знаю, как не вызывать это из статического контекста. Что это значит? Я вызываю метод из нестатического метода, и он должен быть статическим. - person user2782345; 28.02.2018
comment
@ user2782345 Вы используете статический Context для вызова getSystemService(). Попробуйте использовать нестатическую ссылку Context (например, this в действии или представлении). См. ответы на этот вопрос . - person pushasha; 01.03.2018