Использование внутреннего класса BatteryStatsImpl через Reflection в Android

Я пытаюсь получить список запущенных приложений и количество батареи, используемой каждым из них. Гуглил давно, но решения не нашел. Однако было несколько ссылок на внутренние классы PowerProfile, PowerUsageSummary.

Я использовал их с помощью техники Reflection, но не получил того, что искал. PowerUsageSummary показывает те же сведения, что и вы, перейдя в «Настройки устройства» -> «Приложения» -> «Использование батареи» (. Вот как это можно увидеть на устройстве Samsund ).

Затем я использовал класс PowerProfile, но я получил только ток в мА, используемый WIFI, AUDIO, VIDEO, GPS, BLUETOOTH и т. д. (Значения в мА не меняются так часто. Я не уверен, что значения верны ). Другой ссылкой был класс BatteryStatsImpl. Я тестировал этот класс, но значения всегда равны 0. Тем не менее я ищу список запущенных приложений и количество батареи, используемой каждым из них. Любая помощь приветствуется.

Спасибо.

Вот пример кода, который я попробовал для класса BatteryStatsImpl.

        String BATTERY_PROFILE_CLASS = "com.android.internal.os.BatteryStatsImpl";
        Object mBatteryProfile = Class.forName(BATTERY_PROFILE_CLASS).getConstructor().newInstance();
        Method batteryMeth = Class.forName(BATTERY_PROFILE_CLASS).getMethod("getBatteryUptime", long.class);
        Object arglist1[] = new Object[1];
        arglist1[0] = System.currentTimeMillis();
        // This is to calculate the batteryUpTime since the current time.
        Long batteryUptime = (Long) batteryMeth.invoke(mBatteryProfile, arglist1);

        Method dischargeMeth = Class.forName(BATTERY_PROFILE_CLASS).getMethod("getDischargeStartLevel");
        // This is to calculate the dischargeTime of the device battery
        Integer dischargeTime = (Integer) dischargeMeth.invoke(mBatteryProfile);
5
задан Vansi 25 April 2012 в 06:36
поделиться