【问题标题】:battery temperature returns null电池温度返回 null
【发布时间】:2012-07-09 17:52:19
【问题描述】:

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

问题是我想要获取 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);
}

上面是我编写的用于获取 temp 的代码,但它返回 null! 请帮忙!

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

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

【问题讨论】:

    标签: android android-layout android-intent


    【解决方案1】:

    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 摄氏度,请参阅this 问题)。

    【讨论】:

    • 我正在 AVD 上测试应用程序。我是 android 开发新手,希望 AVD 包含电池信息!
    • AVD 将返回 0(而不是 Null,如果您使用上述代码)。真实设备将返回实际值(例如我手机上的 330)。
    • 谢谢老兄!如果我敢问这个,我会一直在想如何解决这个问题! :) 再次感谢!
    • 这很有用!一个小问题:-1 是一个相当糟糕的默认值,因为它代表 -0.1 摄氏度。最好使用更难以置信的值,例如 -999。
    【解决方案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);
    }
    

    【讨论】:

    • 我还不能评论其他帖子 :( 但是在 AVD 上它将显示 0,而不是 null。因此,如果您的 TextView 显示 0,它应该可以在真实设备上工作我正在测试的设备on (one x) 返回 305 到 330
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    相关资源
    最近更新 更多