手机喊话应用实现思路

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

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

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

相关推荐
studyForMokey1 小时前
【Android面试】View绘制流程专题
android·面试·职场和发展
jjinl3 小时前
Android 资源说明
android
恋猫de小郭5 小时前
Swift 6.3 正式发布支持 Android ,它能在跨平台发挥什么优势?
android·前端·flutter
一只会跑会跳会发疯的猴子5 小时前
php操作ssl,亲测可用
android·php·ssl
程序员码歌6 小时前
火爆了,一个Skill搞定AI热点自动化:RSS 聚合 + AI 筛选 + 公众号 + 邮件全流程
android·前端·ai编程
优选资源分享6 小时前
小白转文字 v1.2.8.0 | 安卓离线免费音视频转写工具
android·音视频
安卓机器6 小时前
安卓玩机自做小工具------用于ROM修改 安卓设备联机应用扫描工具 查看应用中文名称 包名 应用路径等
android·修改rom·定制rom·修改系统应用
梦里花开知多少6 小时前
深入理解Android binder线程模型
android·架构
千里马学框架6 小时前
aospc/c++的native 模块VScode和Clion
android·开发语言·c++·vscode·安卓framework开发·clion·车载开发
洞见不一样的自己7 小时前
深度解析Kotlin泛型:从基础到实战
android