1

我有个问题。:) 它很小,但如果有人能提供帮助,我们将不胜感激!

问题是我想要获取 android 设备的电池信息,但它返回 null。我已经做了所有正确的事情,但无法找出错误。:(

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.resources_battery);

    BroadcastReceiver batteryData = new BroadcastReceiver() {
        String tech,temp;
        int level;
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            tech = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
            level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
            temp = intent.getStringExtra(BatteryManager.EXTRA_TEMPERATURE);

            TextView technology = (TextView) findViewById(R.id.Appres_BatType);
            technology.setText("Current Technology : " + tech);
            TextView Tempreture = (TextView) findViewById(R.id.Appres_Battemp);
            Tempreture.setText("Current Battery Tempreature : " +temp);
        }
    };

    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(batteryData, filter);
}

上面是我为获取温度而编写的代码,但它返回 null!请帮忙!

我将代码更改为此 bt 仍然返回零!

temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
4

2 回答 2

6

temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);

是获取温度的正确方法。

这对我有用:

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.resources_battery);

BroadcastReceiver batteryData = new BroadcastReceiver() {
    String tech;
    int level,temp;
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        tech = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
        level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
        temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);

        TextView technology = (TextView) findViewById(R.id.Appres_BatType);
        technology.setText("Current Technology : " + tech);
        TextView Tempreture = (TextView) findViewById(R.id.Appres_Battemp);
        Tempreture.setText("Current Battery Tempreature : " +temp);
    }
};

IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryData, filter);
}

也许你碰巧有一个不能正确报告电池温度的设备?我的设备(Galaxy Nexus)报告:330(1/10 摄氏度,请参阅问题)。

于 2012-07-09T18:11:52.930 回答
2

您只需将 temp 更改为 int 并使用您编写的最后一行

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.resources_battery);

    BroadcastReceiver batteryData = new BroadcastReceiver() {
    String tech;
    int level,temp;
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            tech = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
            level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
            temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,-1);

            TextView technology = (TextView) findViewById(R.id.Appres_BatType);
            technology.setText("Current Technology : " + tech);
            TextView Tempreture = (TextView) findViewById(R.id.Appres_Battemp);
            Tempreture.setText("Current Battery Tempreature : " +temp);
        }
    };

    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(batteryData, filter);
}
于 2012-07-09T18:10:43.693 回答