如何在Android手机中使用磁传感器检测金属?

时间:2013-05-04 07:30:50

标签: android android-sensors

  1. 我想用磁传感器值检测金属。我连续得到的值如x = 30.00,y = -20.00,z = -13.00

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

  3. 代码是

    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]);
    

2 个答案:

答案 0 :(得分:6)

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

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%的情况下发挥作用。

答案 1 :(得分:0)

你可以使用android磁场传感器检测磁场而不是金属。但是有磁场的金属也会被检测到,例如铁,镍等。因为黑色金属的行为与带电电缆相同。