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

如何在android手机中使用磁性传感器检测金属?,android,android-sensors,Android,Android Sensors,我想用磁性传感器的值来检测金属。我不断地得到一些值,比如x=30.00,y=-20.00,z=-13.00 现在我想知道如何使用这些值来检测任何金属(mathameticalcalu,公式) 代码是 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); // get compass sensor (ie magnetic field) myCompassSensor = sensorManager.getDefault

我想用磁性传感器的值来检测金属。我不断地得到一些值,比如x=30.00,y=-20.00,z=-13.00

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

  • 代码是

    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提供了这样做的功能。查看
    地磁场
    ,参考在这里

    然后,如果从传感器中读取的值与预期值相差甚远,则存在干扰传感器附近地球磁场的“某种东西”(你猜到了,金属)。例如,您可以实施以下测试:

    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
    }
    
    if(mag>1.4*expectedMag | | mag<0.6*expectedMag){
    //某些金属很可能靠近传感器
    }否则{
    //一切正常
    }
    

    您应该尝试一下
    1.4
    0.6
    值,以便它适合您的应用程序。请注意,由于智能手机上的磁性传感器非常便宜且不好用,所以这种方法永远不会100%都有效

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

    像这样吗<代码>//现在计算字段值float magHere=(float)Math.sqrt(Math.pow(x,2)+Math.pow(y,2)+Math.pow(z,2));//计算期望的浮点值mageexpected=(float)Math.sqrt(geoField.getX()+geoField.getY()+geoField.getZ())你只是忘记了将geoField的组件平方,当我将pow与geoField进行比较时,结果有点奇怪:^2:25876.793。没有^2:15.182645。但是我会尝试这个结果。你能帮我解决这个问题吗?ios是否有相当于地磁场的磁场。这个值会有多大,会干扰罗盘,使其给出错误的航向?