Android 接近传感器报告的值如;38654705664“;

Android 接近传感器报告的值如;38654705664“;,android,proximity,proximitysensor,Android,Proximity,Proximitysensor,我的应用程序使用接近传感器在应用程序的主要活动中打开/关闭屏幕。这很好,但是我收到了HTC One用户的崩溃报告: 08-23 11:25:04.754 E/AndroidRuntime(30499):致命异常:主 08-23 11:25:04.754 E/AndroidRuntime(30499):java.lang.NumberFormatException:无效int:“38654705664” 08-23 11:25:04.754 E/AndroidRuntime(30499):位于ja

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

08-23 11:25:04.754 E/AndroidRuntime(30499):致命异常:主 08-23 11:25:04.754 E/AndroidRuntime(30499):java.lang.NumberFormatException:无效int:“38654705664” 08-23 11:25:04.754 E/AndroidRuntime(30499):位于java.lang.Integer.invalidInt(Integer.java:138) 08-23 11:25:04.754 E/AndroidRuntime(30499):位于java.lang.Integer.parse(Integer.java:375) 08-23 11:25:04.754 E/AndroidRuntime(30499):在java.lang.Integer.decode(Integer.java:188) 08-23 11:25:04.754 E/AndroidRuntime(30499):位于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来包围整数解析,以避免出现明显错误的值,如“38654705664”

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

为什么不直接调用
intdis=(int)传感器?stacktrace中的值(38654705664)超过了
int
的最大可能值(2147483647),因此这没有帮助。我可以使用
long
,但38654705664显然不是一个“真正的”接近值,所以我不知道这里发生了什么。在代码中,您将float转换为string,然后将string转换为int。如果float超过max int值,您希望在日志中看到什么?没错,float-->string步骤没有任何意义。然而,即使是
intdis=(int)传感器在这种情况下也会引发异常,对吗?我想进一步了解为什么传感器值会出现在第一种情况下-是用户端的传感器校准错误,还是我应该尝试/捕获的临时“侥幸”值(除了这样一个“坏”值外,传感器应该工作正常)?将形式
float
转换为
int
不会导致异常。在像你这样的情况下,我们只是失去了精确性。如果需要完整值,则应使用
float
,而不要尝试强制转换它。不是关于传感器api中的错误值。他们随时都可以来。如果可以识别它们,则可以将其从计算中排除。如果这是一个困难的要求,您可以实现一些统计过滤器。希望这有帮助。