手机喊话应用实现思路

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

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

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

相关推荐
潜龙952733 分钟前
手机自动化测试AI新方案
人工智能·智能手机
2501_915909064 小时前
iOS 应用反调试技详解术 检测调试器的原理与防护实践
android·ios·小程序·https·uni-app·iphone·webview
Lvan的前端笔记4 小时前
AndroidX 完全入门指南
android·androidx
帅次5 小时前
Android 应用高级面试:Window 近1年高频追问 18 题
android·面试·职场和发展
总捣什么乱15 小时前
MySQL MySQL是怎么保证主备一致的?
android·mysql·adb
zzm6286 小时前
精读 HinDroid:基于异构信息网络的安卓恶意软件检测
android
limingade6 小时前
如何在手机本地不依靠网络-实现真正的端到端语音交互的智能AI应答
人工智能·智能手机·ai机器人·ai外呼·手机本地ai大模型·离线ai机器人·离线ai
weixin_440784116 小时前
Android基础知识汇总
android·java·android studio
禁默6 小时前
手机远程控制电脑教程:ToDesk跨设备协同完全指南(5大场景实测)
智能手机·电脑
sbjdhjd6 小时前
安全初级 | Upload 文件上传漏洞实操
android·经验分享·安全·网络安全·开源·php·apache