电池温度返回 null
Posted
技术标签:
【中文标题】电池温度返回 null【英文标题】:battery temperature returns 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);
【问题讨论】:
【参考方案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以上是关于电池温度返回 null的主要内容,如果未能解决你的问题,请参考以下文章