我试图通过以下方法获得该设备的当前电池级别:
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’
这可能永远不会影响我的应用程序,但由于有一个最终产品依赖于它,我想知道,我如何才能适应这个潜在的问题?是否有一种方法来重组上面的实现相同的结果(获得电池的当前充电状态)?
发布于 2015-08-11 16:00:04
registerReceiver的Javadoc声明:
* @return The first sticky intent found that matches <var>filter</var>,
* or null if there are none.因此,这可能会返回一个空事件。您已经处理了值无效的情况((level == -1 || scale == -1)),因此我建议您只检查意图是否为空,并提前返回该值:
if (batteryIntent == null) {
return -1;
}发布于 2015-08-11 15:56:41
我会抛出一个try/catch,因为您知道它会抛出错误,如果/当它发生时,您可以适当地处理它。
try {
//your code here
} catch (NullPointerException e) {
//handle the error here, maybe return -1?
}https://stackoverflow.com/questions/31946515
复制相似问题