【问题标题】:Get temperature of battery on android在android上获取电池温度
【发布时间】:2011-04-29 04:16:22
【问题描述】:

如何在android中获取电池的温度?

【问题讨论】:

    标签: android sensors android-sensors temperature


    【解决方案1】:

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

    公共静态最终字符串EXTRA_TEMPERATURE
    ACTION_BATTERY_CHANGED 的附加值:包含当前电池温度的整数。

    【讨论】:

    • ACTION_BATTERY_CHANGED 是关于什么的?我必须吃午饭才能测量体温吗?我是否必须听取一些系统范围的意图?
    • Google 是你的朋友:tutorialforandroid.com/2009/01/… 该教程是关于如何获取电池电量的,但结合我发布的文档链接,我相信你可以弄清楚如何获取电池 -温度,只需使用“温度”而不是“水平”...
    • @Christian:如果您不想注册,则无需注册实际的BroadcastReceiver。调用registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)),它将返回为该操作广播的最后一个 Intent。使用EXTRA_TEMPERATURE extra 获得您所寻求的价值。
    • 很棒的帖子,我做了一些示例应用程序来读取温度,效果很好,但我无法弄清楚结果的单位是什么,这是我的帖子 (stackoverflow.com/questions/7716054/…)跨度>
    • 他们真的应该使“null”版本成为一个具有不同名称的单独方法,而不是重载它的含义。感谢您的评论,虽然我什至没有想过要在那里查找。
    【解决方案2】:

    试试这个:

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

    【讨论】:

    【解决方案3】:
        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";
        }
    

    【讨论】:

    【解决方案4】:
    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));
          }
    

    【讨论】:

      【解决方案5】:

      尝试读取静态 int BatteryManager.EXTRA_TEMPERATURE

      【讨论】:

      • 根据文档,EXTRA_TEMPERATURE 恰好是一个字符串。它也是静态的,因此始终是“温度”。
      • 没错,但文档还说:“ACTION_BATTERY_CHANGED 的额外内容” - 所以你的静态字符串只是从 ACTION_BATTERY_CHANGED 获取温度的关键。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多