我试图通过以下方式获取设备当前的电池电量:
Intent batteryIntent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
Log.i(LOG_FILTER, "Battery level = " + (level*100)/scale);
// error check values
if (level == -1 || scale == -1) {
return -1;
} else {
return (level * 100) / scale;
}
代码似乎有效并且从未让我失望,但我收到警告:
方法调用'batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1)'可能会产生'java.lang.NullPointerException'
这实际上可能永远不会影响我的应用程序,但由于有最终产品取决于它,我想知道,我如何应对这个潜在问题? 有没有办法重组上面的内容以达到相同的结果(获得电池的当前充电状态)?
答案 0 :(得分:3)
registerReceiver
州的Javadoc:
* @return The first sticky intent found that matches <var>filter</var>,
* or null if there are none.
因此, 可能会返回null事件。您已经处理了值无效的情况((level == -1 || scale == -1)
),因此我建议您只检查intent是否为null,并提前返回该值:
if (batteryIntent == null) {
return -1;
}
答案 1 :(得分:0)
我会抛出一个try / catch,因为你知道它可能会抛出错误,然后你可以在它发生的时候适当地处理它。
try {
//your code here
} catch (NullPointerException e) {
//handle the error here, maybe return -1?
}