接近传感器报告的值如“38,654,705,664”

时间:2013-08-23 10:40:43

标签: android proximity proximitysensor

我的应用程序使用接近传感器在应用程序的主要活动上打开/关闭屏幕。这很好,但是我收到了HTC One S用户的崩溃报告:

  

08-23 11:25:04.754 E / AndroidRuntime(30499):致命异乎寻常:主要   08-23 11:25:04.754 E / AndroidRuntime(30499):java.lang.NumberFormatException:无效的int:“38,654,705,664”   08-23 11:25:04.754 E / AndroidRuntime(30499):at java.lang.Integer.invalidInt(Integer.java:138)   08-23 11:25:04.754 E / AndroidRuntime(30499):at java.lang.Integer.parse(Integer.java:375)   08-23 11:25:04.754 E / AndroidRuntime(30499):at java.lang.Integer.decode(Integer.java:188)   08-23 11:25:04.754 E / AndroidRuntime(30499):at com.myapp.MyActivity.onSensorChanged(NotificationActivity.java:793)   08-23 11:25:04.754 E / AndroidRuntime(30499):在android.hardware.SystemSensorManager $ ListenerDelegate $ 1.handleMessage(SystemSensorManager.java:204)

我正在使用的代码是

private NumberFormat numForm = new DecimalFormat(); 

@Override
public void onSensorChanged(SensorEvent event) {
    float sensor = event.values[0];
    String cm = numForm.format(sensor);
    int dis = Integer.decode(cm);

    Log.i(TAG, "Proximity distance: " + dis);
}

这是用户端的传感器校准问题,还是我可以用try / catch简单地围绕整数解析,以避免明显错误的值,如“38,654,705,664”?

1 个答案:

答案 0 :(得分:2)

将表单float转换为int不会导致异常。我们在像你这样的情况下会失去精确度。如果您需要“完整”值,则应该使用float并且不要尝试强制转换它。现在关于来自传感器API的错误值。他们总能来。如果您能识别它们,则可以将它们从计算中排除。如果这是必须要求,您可以实现一些统计过滤器。希望这会有所帮助。