簡體   English   中英

如何從Android中的Battery Manager Class獲取電池溫度?

[英]How to get battery temperature from Battery Manager Class in android?

這是我的BattreyInfo.java文件。 我正在嘗試提取電池溫度並將其顯示在屏幕上。 Eclipse表示無法將BroadcastReciever解析為某種類型。 我不明白 我已正確導入包。 它也無法識別onRecieve功能。 我是否必須為BroadcastReciever創建另一個類或其他類?

package com.example.batterywidget;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.BatteryManager;
import android.widget.TextView;
import android.content.BroadcastReceiver;
import android.content.Context; 
import android.content.IntentFilter;
import android.graphics.Color; 
import android.view.View;


public class BatteryInfo extends Activity {

private TextView BatTemp;
BroadcastReceiver mBatInfoReciever = new BroadcastReceiver(){

    @Override
    public void onRecieve(Context arg0, Intent intent){
        int temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
        BatTemp.setText(String.valueOf(temp) + "%");

    }
};

    //called when the activity is first created
    @Override
     public void onCreate(Bundle binfo){
     super.onCreate(binfo);
     setContentView(R.layout.batteryinfo);
     BatTemp = (TextView) this.findViewById(R.id.battery_temp);


    }
    @Override
    protected void onResume() {
            super.onResume();
            IntentFilter filter = new IntentFilter();

            filter.addAction(Intent.ACTION_BATTERY_CHANGED);
            registerReceiver(mBatInfoReceiver, filter);
    }
    @Override
    protected void onPause() {
            super.onPause();
            unregisterReceiver(mBatInfoReceiver);
    }

}

BroadcastReceiver是一個抽象類。 這意味着您無法創建它的實例。 您必須創建自己的類並擴展BroadcastReceiver。

我認為您可以將所有現有代碼復制到新課程中。

你似乎有3個廣播公司。 第一個看起來像這樣:

public class BatInfoReceiver extends BroadcastReceiver{
 @Override
    public void onRecieve(Context arg0, Intent intent){
        int temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
        BatTemp.setText(String.valueOf(temp) + "%");

    }
}

現在可以創建這個類的實例:

BatInforeceiver mBatInfoReceiver = new BatInfoReceiver();

然后你對其他兩個BroadcastReceivers做同樣的事情。

private void batteryLevel() {
        BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,
                        -1);
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                int level = -1;
                if (rawlevel >= 0 && scale > 0) {
                    level = (rawlevel * 100) / scale;
                }
                batteryLevel.setText("Battery Level Remaining: " + level + "%");
            }
        };
        IntentFilter batteryLevelFilter = new IntentFilter(
                Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryLevelReceiver, batteryLevelFilter);
    }

這是我用來獲取溫度的代碼

batteryReceiver = new BroadcastReceiver() {
            int level = -1;
            int scale = -1;
            int temperature = -1;
            @Override
            public void onReceive(Context context, Intent intent) {
                level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);

                int health = intent.getIntExtra("health",BatteryManager.BATTERY_HEALTH_UNKNOWN);
                String strHealth;
                if (health == BatteryManager.BATTERY_HEALTH_GOOD){
                    strHealth = "Good";
                } else if (health == BatteryManager.BATTERY_HEALTH_OVERHEAT){
                    strHealth = "Over Heat";
                } else if (health == BatteryManager.BATTERY_HEALTH_DEAD){
                    strHealth = "Dead";
                } else if (health == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE){
                    strHealth = "Over Voltage";
                } else if (health == BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE){
                    strHealth = "Unspecified Failure";
                } else{
                    strHealth = "Unknown";
                }


                batteryStatusTextView.setText(" Temperature: "+temperature/10+"C" + " " + strHealth);

            }
        };
        IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryReceiver, filter);
BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
    int scale = -1;
    int level = -1;
    int voltage = -1;
    int temp = -1;
    @Override
    public void onReceive(Context context, Intent intent) {
        level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
        temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
        voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
        Log.e("BatteryManager", "level is "+level+"/"+scale+", temp is "+temp+", voltage is "+voltage);
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM