Получить температуру батареи на Android

Как узнать температуру батареи в андроиде?


person Christian    schedule 22.10.2010    source источник


Ответы (4)


Попробуй это:

private class mBatInfoReceiver extends BroadcastReceiver{ 

    int temp = 0;

    float get_temp(){
        return (float)(temp / 10);
    }

    @Override 
    public void onReceive(Context arg0, Intent intent) {
        temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0);
    }

};

затем определите в своих объявлениях переменных:

private mBatInfoReceiver myBatInfoReceiver;

и в onCreate:

    @Override 
    public void onCreate(Bundle b) { 
        super.onCreate(b);  
        setContentView(R.layout.activity_main);

        // ...
        // Add this

        myBatInfoReceiver = new mBatInfoReceiver();                                     

        this.registerReceiver(this.myBatInfoReceiver,
                              new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

     } 

более поздний вызов, например, в OnClickListener()

float temp = myBatInfoReceiver.get_temp(); 

String message = "Current " + BatteryManager.EXTRA_TEMPERATURE + " = " +
                  temp +  Character.toString ((char) 176) + " C";
person Ingo    schedule 06.10.2013
comment
Чем это решение лучше, чем гораздо более короткое: stackoverflow.com/a/21356233/7483211 - person Cornelius Roemer; 31.12.2019

http://developer.android.com/reference/android/os/BatteryManager.html

public static final Строка EXTRA_TEMPERATURE
Дополнительно для ACTION_BATTERY_CHANGED: целое число, содержащее текущую температуру батареи.

person Select0r    schedule 22.10.2010
comment
О чем ACTION_BATTERY_CHANGED? Должен ли я обедать с намерением получить температуру? Должен ли я слушать какое-то общесистемное намерение? - person Christian; 22.10.2010
comment
Google — ваш друг: tutorialforandroid.com/2009/01 / Это руководство о том, как получить уровень заряда батареи, но вместе с ссылкой на документацию, которую я разместил, я уверен, что вы сможете понять, как получить температуру батареи, просто используйте температуру вместо уровня ... - person Select0r; 22.10.2010
comment
@Christian: Вам не нужно регистрировать настоящий BroadcastReceiver, если вы этого не хотите. Вызовите registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)), и он вернет последнее намерение, переданное для этого действия. Используйте дополнительные EXTRA_TEMPERATURE, чтобы получить желаемое значение. - person CommonsWare; 22.10.2010
comment
Отличный пост, я сделал пример приложения для считывания температуры, и оно отлично работает, но я не могу не понять, что является единицей результата, вот мой пост (stackoverflow.com/questions/7716054/) - person Lukap; 11.10.2011
comment
они действительно должны сделать нулевую версию отдельным методом с другим именем, а не перегружать его значение. Спасибо за комментарий, хотя я и не подумала его там посмотреть. - person Archimedes Trajano; 09.02.2012

Попробуйте прочитать статический int BatteryManager.EXTRA_TEMPERATURE.

person GôTô    schedule 22.10.2010
comment
Согласно документации EXTRA_TEMPERATURE является строкой. Это также статично и, следовательно, всегда будет температурой. - person Christian; 22.10.2010
comment
Верно, но в документе также говорится: «Дополнительно для ACTION_BATTERY_CHANGED», поэтому ваша статическая строка — это просто ключ для получения температуры от ACTION_BATTERY_CHANGED. - person Select0r; 22.10.2010

person    schedule
comment
Делает ли это ту же работу, что и принятый ответ? Если да, то почему он намного короче? Это все встроено? Было бы здорово иметь краткое описание. Спасибо! - person Cornelius Roemer; 04.12.2019
comment
@CorneliusRoemer, потому что это липкое намерение / липкая трансляция, для более подробной информации разработчик .android.com/training/monitoring-device-state/ stackoverflow.com/questions/3490913/what-is-a-sticky-broadcast - person Mushahid Gillani; 14.04.2020