Android磁场监听、磁场强度计算、金属探测器

方案实现:通过使用手机自带的磁场传感器来对实时数据进行处理分析

磁场传感器会返回三个方向的磁感应强度,分别是X,Y,Z,需要对这几个数据做处理得出当前的总磁感应强度

磁感应强度计算公式:

rawTotal = sqrt(x2+y2+z2

初始化磁场传感器


    private var sensorManager: SensorManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
    	...
        //实例化传感器管理
        sensorManager = activity?.getSystemService(Context.SENSOR_SERVICE) as SensorManager
        //注册磁场传感器监听器
        sensorManager?.registerListener(
        this@SensorScanActivity,//继承SensorEventListener接口并重写方法,或者新建一个listener对象
        sensorManager?.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_NORMAL)
    }
	

重写Lisenter方法

    override fun onSensorChanged(sensorEvent: SensorEvent) {
        if (sensorEvent.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
            //如果当前页面处于前台可见才执行下面的视图更新,否则不执行。
            if (!userVisibleHint) return
            //保持屏幕常亮
            activity?.getWindow()?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            //分别计算三轴磁感应强度
            val xLateral = sensorEvent.values[0].toDouble()
            val yLateral = sensorEvent.values[1].toDouble()
            val zLateral = sensorEvent.values[2].toDouble()
            //Log.d(TAG,X_lateral + "");
            //计算出总磁感应强度
            val rawTotal =
                sqrt(xLateral * xLateral + yLateral * yLateral + zLateral * zLateral);
        }
    }

    override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
    }

启动和关闭传感器

启动传感器只需要注册监听,而关闭传感器同样仅需要移除监听

        sensorManager?.unregisterListener(this)

金属探测器的实现

要实现金属探测器,则需要先假定一个初始磁感应强度,比如在开阔地带的一个计算的初始值,保存下来,再通过实时计算的总磁感应强度做对比,如果高于初始磁感应强度可使用进度条升高进行显示,具体的显示方法和磁场大小敏感度需要自行决定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值