摇一摇(根据传感器和加速器实现)

本文介绍如何利用设备的传感器和加速器来实现摇一摇功能。主要探讨在MainActivity中进行相关编程的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摇一摇(根据传感器和加速器实现)

mainactivity

package com.example.myyaoyiyao

import android.content.Context
import android.content.Intent
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Message
import android.os.Vibrator
import android.util.Log
import android.widget.Toast



class MainActivity : AppCompatActivity() {
    var mysensorManger:SensorManager?=null
    var vibrator:Vibrator?=null
    var listener:SensorEventListener?=null
    var hander:Handler= object: Handler(){
        override fun handleMessage(msg: Message) {
            super.handleMessage(msg)
            when (msg.what) {
                10 -> {

                    Toast.makeText(this@MainActivity, "检测到摇晃,执行操作!", Toast.LENGTH_SHORT).show()
                    Log.i("---", "检测到摇晃,执行操作!")
                    val intent = Intent(this@MainActivity, Main2Activity::class.java)
                    startActivity(intent)
                }
            }
        }
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //首先获得传感器的实例
        mysensorManger= getSystemService(Context.SENSOR_SERVICE) as SensorManager?
        vibrator= getSystemService(Context.VIBRATOR_SERVICE) as Vibrator?
         listener = object : SensorEventListener {
            override fun onAccuracyChanged(p0: Sensor?, p1: Int) {

            }

            override fun onSensorChanged(p0: SensorEvent?) {
                // 传感器信息改变时执行该方法
                val values = p0!!.values
                val x = values[0] // x轴方向的重力加速度,向右为正
                val y = values[1] // y轴方向的重力加速度,向前为正
                val z = values[2] // z轴方向的重力加速度,向上为正
                Log.i("111", "x轴方向的重力加速度$x;y轴方向的重力加速度$y;z轴方向的重力加速度$z")
                // 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。
                val medumValue = 19// 三星 i9250怎么晃都不会超过20,没办法,只设置19了
                if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) {
                    vibrator!!.vibrate(200)
                    val msg = Message()
                    msg.what = 10
                    hander.sendMessage(msg)
                }
            }
        }
    }

    override fun onResume() {
        super.onResume()
        if (mysensorManger!=null){//注册监听器
            mysensorManger!!.registerListener(listener, mysensorManger!!.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
            ,SensorManager.SENSOR_DELAY_NORMAL)
        }
    }

    override fun onPause() {
        super.onPause()
        if (mysensorManger!=null){//取消传感器
            mysensorManger!!.unregisterListener(listener)
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值