手机喊话应用实现思路

手机要是动一下,就喊话"摇摇零线,摇摇零线",是不是比较酷,

这里实现一下手机翻转一下,播放声音的效果,

通过sensor识别到手机的运动状况,然后播放音频,

java 复制代码
public class MainActivity extends AppCompatActivity {
    MySensorEventListener sensorEventListener;
    private String tag = "test9";

    public class MySensorEventListener implements SensorEventListener {

        private float prevY;
        private float prevZ;

        @Override
        public void onSensorChanged(SensorEvent event) {
            float[] values = event.values;
            int type = event.sensor.getType();
            if (type == Sensor.TYPE_ACCELEROMETER) {
                float x = values[0];
                float y = values[1];
                float z = values[2];
                if (Float.compare(prevY, y) != 0 && Float.compare(prevZ, z) != 0) {
                    if (y > prevY && z > prevZ) {
                        // 顺时针翻转
                        Log.i(tag, "1====");
                        onFlip();
                    } else if (y < prevY && z < prevZ) {
                        // 逆时针翻转
                        Log.i(tag, "2====");
                        onFlip();
                        Play();
                    }
                }
            } else if (type == Sensor.TYPE_GYROSCOPE) {
                // 使用陀螺仪传感器的数据识别翻转,具体算法需要自己实现
            }
        }

        private void onFlip() {
            // 执行翻转后的操作
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // Do nothing
        }
    }

    void Play()  {
        MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.hello);
  //      MediaPlayer mediaPlayer = new MediaPlayer();
        try {
            Log.i(tag, "play =========== ");
  //          mediaPlayer.setDataSource("/sdcard/Recordings/910.m4a");
            mediaPlayer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sensorEventListener = new MySensorEventListener();
        SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        sensorManager.registerListener(sensorEventListener,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI);


    }
}

初步的一个实现,没有使用service,直接播放声音,连续调用会出现同时播放的情况,反而有了回声的效果

相关推荐
wulechun2 小时前
哔哩哔哩开源微服务治理框架Overlord深度解析与实战使用指南
智能手机
_李小白3 小时前
【android opencv学习笔记】Day 28: 滤波算法之中值滤波器
android·opencv·学习
代龙涛5 小时前
WordPress page.php 页面模板与自定义模板使用方法
android·开发语言·php
爱莉希雅&&&6 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控
zfoo-framework8 小时前
理解kotlin limitedParallelism(1)与Actor模型
android·开发语言·kotlin
2401_865721339 小时前
御网杯初赛2026
android
葱段10 小时前
【Compose】输入框(TextField)点击空白处失焦并关闭软键盘
android
刮风那天12 小时前
Android Framework 核心架构图
android
__Witheart__12 小时前
3588 安卓编译空间不足报错
android
aaajj12 小时前
【Android】手机屏幕劫持防护
android·智能手机