手机喊话应用实现思路

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

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

通过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,直接播放声音,连续调用会出现同时播放的情况,反而有了回声的效果

相关推荐
好的佩奇7 小时前
Dart 之集合元素
android·flutter·dart
Easyhood8 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
FlightYe9 小时前
音视频修炼之容器与协议(四):RTSP详解
android·linux·ffmpeg·音视频·dash
疯华整猫11 小时前
删掉 LeakCanary 那天,我用 Trae 自己撸了一套:最难的不是分析堆,是决定什么时候 dump
android·人工智能·性能优化
mmsx18 小时前
耳切法切带洞多边形:论文能跑通,真实数据为什么崩
android·kotlin
洞见前行18 小时前
你的 Activity 关了,为什么还活着?Android 内存泄漏从发现、定位到线上治理
android·性能优化·leakcanary
caoliaoerweima20 小时前
草料二维码小程序上线活码编辑器:手机上也能编辑活码了
智能手机·小程序·编辑器·草料二维码
一支标20 小时前
【手机+电脑】通达信《分时T王》策略战法套装标策略深度解析使用说明书
智能手机
Kapaseker20 小时前
Kotlin 又要加语法糖了:这次轮到 if-else
android·kotlin