获取安卓设备电池温度

18

我该如何在安卓设备中获取电池温度?

5个回答

13

1
ACTION_BATTERY_CHANGED是关于什么的?我是否需要启动一个意图来获取温度?我是否需要监听某些系统范围的意图? - Christian
Google是你的好朋友:http://www.tutorialforandroid.com/2009/01/getting-battery-information-on-android.html 这个教程是关于如何获取电池电量的,但是结合我发布的文档链接,我相信你可以弄清楚如何获取电池温度,只需使用“temperature”代替“level”即可... - Select0r
10
@Christian:如果您不想注册一个实际的“BroadcastReceiver”,则不需要这样做。调用registerReceiver(null,new IntentFilter(Intent.ACTION_BATTERY_CHANGED)),它将返回最后一次针对此操作广播的Intent。使用EXTRA_TEMPERATURE extra来获取所需的值。 - CommonsWare
很棒的帖子,我做了一些示例应用程序来读取温度,它运行得很好,但我无法弄清楚结果的单位是什么,这是我的帖子(http://stackoverflow.com/questions/7716054/getting-the-battery-temperature-and-unit-of-the-result) - Lukap
他们应该将“null”版本作为一个不同名称的单独方法而非重载其含义。感谢评论,我甚至没有想到去查找它。 - Archimedes Trajano
@Select0r链接已损坏。 - Eric Schnipke

10

试试这个:

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";

这个解决方案比这个更短的解决方案有什么优点:https://dev59.com/VG865IYBdhLWcg3wFqdV#21356233 - Cornelius Roemer

9
    public static String batteryTemperature(Context context)
    {
        Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));    
        float  temp   = ((float) intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0)) / 10;
        return String.valueOf(temp) + "*C";
    }

这个代码是否和被接受的答案完成同样的工作?如果是,为什么它要短得多?它是否已经内联了所有内容?能否简单描述一下?谢谢! - Cornelius Roemer
@CorneliusRoemer 因为它是一种粘性意图/粘性广播,更多细节请参考以下链接: https://developer.android.com/training/monitoring-device-state/battery-monitoring https://dev59.com/13A75IYBdhLWcg3wFEoI - Mushahid Gillani

1
TextView BatTemp;

private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent intent) 
        {

          // TODO Auto-generated method stub

          int temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0);

      };

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


        BatTemp = (TextView) this.findViewById(R.id.textView8);

        this.registerReceiver(this.mBatInfoReceiver,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
      }

0

根据文档,EXTRA_TEMPERATURE是一个字符串。它也是静态的,因此将始终为“temperature”。 - Christian
真的,但文档也说:“额外为ACTION_BATTERY_CHANGED”-因此您的静态字符串只是从ACTION_BATTERY_CHANGED获取温度的关键。 - Select0r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接