android - 如何阻止磁传感器检测金属?

标签 android android-sensors

我正在开发一个基于传感器的应用程序,其主要目的是检测电缆的磁场。如果电缆中有电流流动,那么它应该显示一些消息,当没有电流时意味着它应该通知另外。使用以下代码,它检测电流,但问题是它还检测金属场。如果有人知道解决方案,请告诉我。

public class MainActivity extends Activity implements SensorEventListener {
      SensorManager sensorManager;
     // static final int sensor = SensorManager.SENSOR_ORIENTATION;

      private Sensor myCompassSensor;
      private TextView outView,tesla1,voltage;
      ImageView light1;
      Vibrator v;
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        outView = (TextView) findViewById(R.id.output);
        tesla1=(TextView)findViewById(R.id.tesla);
        light1=(ImageView)findViewById(R.id.light);
        voltage=(TextView)findViewById(R.id.voltage);
        v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        // get sensor manager
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        // get compass sensor (ie magnetic field)
        myCompassSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
      }

      // register to listen to sensors
      @Override
      public void onResume() {
        super.onResume();
        sensorManager.registerListener(this, myCompassSensor, SensorManager.SENSOR_DELAY_NORMAL);
      }

      // unregister
      @Override
      public void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this,myCompassSensor);
      }

      // Ignore for now
      public void onAccuracyChanged(Sensor sensor, int accuracy) {
          // TODO Auto-generated method stub
      }


    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
         // this check is unnecessary with only one registered sensor
          // but it's useful to know in case you need to add more sensors
         synchronized (this)
         {
          if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
             // int orientation = (int) event.values[0];
              float azimuth = Math.round(event.values[0]);
                float pitch = Math.round(event.values[1]);
                float roll = Math.round(event.values[2]);
                double tesla= Math.sqrt((azimuth*azimuth)+(pitch*pitch)+(roll*roll));

                String out = String.format("X: %.2f\nY: %.2f\nZ: %.2f",
                    azimuth, pitch, roll);
                String a=String.format("%2f", tesla);
                Log.d("MAGENTIC---", out);
               // outView.setText(out);
                tesla1.setText(a);
                if(tesla>=80)
                {
                    v.vibrate(200);
                    light1.setBackgroundResource(R.drawable.voltage_on);
                    voltage.setText("Voltage Detected !");
                }
                else
                {
                light1.setBackgroundResource(R.drawable.voltage_off);
                voltage.setText("No Voltage Found");
                }
    }
          else
              return;
    }
    }
}

最佳答案

如果您正在检测(交流)交流电/信号,那么即使在很短的时间内,您也应该看到幅度和极性发生变化的信号。您可以采样并存储多个读数并检测到这种情况正在发生。在磁场稳定的情况下,读数也应该稳定。您应该能够开发一种算法来区分这些不同的情况。

如果您正在检测稳态直流电流,这可能没有帮助。

关于android - 如何阻止磁传感器检测金属?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16052775/

相关文章:

java - 传感器采样率总是太高

php - Android远程数据库连接使用PHP和JSON

android - 在 Android 中,当使用传感器收集数据时,我应该使用 IntentService 还是 Service?

android - 有没有办法获得接近传感器与物体的精确距离?

Android:禁用来自第 3 方库的日志输出

android - Android 上的方位角/偏航和滚动方向传感器值不一致

android-sensors - Android 传感器在后台应用程序时监听

android - ListView 多选问题?

java - Android:在ViewAnimator的进出动画之间添加延迟

java - glass gdk 的文件权限