android - 如何在安卓手机中使用磁传感器检测金属?

标签 android android-sensors

  1. 我想使用磁传感器值检测金属。我不断获得 x=30.00、y=-20.00、z=-13.00 等值

  2. 现在我想知道如何使用这些值来检测任何金属(数学计算,公式)

代码是

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// get compass sensor (ie magnetic field)
myCompassSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

float azimuth = Math.round(event.values[0]);
float pitch = Math.round(event.values[1]);
float roll = Math.round(event.values[2]);

最佳答案

要检测金属,您必须检查磁场强度,即磁场矢量的大小。

float mag = Math.sqrt(x^2 + y^2 + z^2);

然后您需要将此值与地球上您所在位置的磁场预期值进行比较。幸运的是,Android 提供了这样做的功能。查看 GeomagneticField,引用在这里 https://developer.android.com/reference/android/hardware/GeomagneticField.html

然后,如果您从传感器读取的值与预期值相去甚远,则说明有“某种东西”(您猜对了,是金属)干扰了传感器附近的地球磁场。例如,您可以实现的测试如下:

if (mag > 1.4*expectedMag || mag < 0.6*expectedMag) {
    //there is a high probability that some metal is close to the sensor
} else {
    //everything is normal
}

您应该对 1.40.6 值进行一些试验,以使其适合您的应用程序。请注意,这永远不会在 100% 的时间内起作用,因为智能手机上的磁传感器非常便宜且令人讨厌。

关于android - 如何在安卓手机中使用磁传感器检测金属?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16371777/

相关文章:

android - 我如何在android中的模式列表或网格中显示我的列表

android - 如何使用 sencha touch 仅获取 gps 位置?

android - Android 中的传感器坐标系不会改变,对吗?

android - onSensorChanged() 未在 Android 上触发(nVidia Shield 平板电脑)

java - 通用传感器名称

android - 像 Google IO 2014 应用程序中的 Activity 之间的平滑过渡

android - 如何在应用程序被杀死后在后台运行线程

java - 手指在屏幕上滑动的灵敏度

Android 使用传感器获取设备方向

java - 如何使用卡片向 RecyclerView 添加 searchBar