• 手机喊话应用实现思路


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

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

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

    1. public class MainActivity extends AppCompatActivity {
    2. MySensorEventListener sensorEventListener;
    3. private String tag = "test9";
    4. public class MySensorEventListener implements SensorEventListener {
    5. private float prevY;
    6. private float prevZ;
    7. @Override
    8. public void onSensorChanged(SensorEvent event) {
    9. float[] values = event.values;
    10. int type = event.sensor.getType();
    11. if (type == Sensor.TYPE_ACCELEROMETER) {
    12. float x = values[0];
    13. float y = values[1];
    14. float z = values[2];
    15. if (Float.compare(prevY, y) != 0 && Float.compare(prevZ, z) != 0) {
    16. if (y > prevY && z > prevZ) {
    17. // 顺时针翻转
    18. Log.i(tag, "1====");
    19. onFlip();
    20. } else if (y < prevY && z < prevZ) {
    21. // 逆时针翻转
    22. Log.i(tag, "2====");
    23. onFlip();
    24. Play();
    25. }
    26. }
    27. } else if (type == Sensor.TYPE_GYROSCOPE) {
    28. // 使用陀螺仪传感器的数据识别翻转,具体算法需要自己实现
    29. }
    30. }
    31. private void onFlip() {
    32. // 执行翻转后的操作
    33. }
    34. @Override
    35. public void onAccuracyChanged(Sensor sensor, int accuracy) {
    36. // Do nothing
    37. }
    38. }
    39. void Play() {
    40. MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.hello);
    41. // MediaPlayer mediaPlayer = new MediaPlayer();
    42. try {
    43. Log.i(tag, "play =========== ");
    44. // mediaPlayer.setDataSource("/sdcard/Recordings/910.m4a");
    45. mediaPlayer.start();
    46. } catch (Exception e) {
    47. e.printStackTrace();
    48. }
    49. }
    50. @Override
    51. protected void onCreate(Bundle savedInstanceState) {
    52. super.onCreate(savedInstanceState);
    53. setContentView(R.layout.activity_main);
    54. sensorEventListener = new MySensorEventListener();
    55. SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    56. sensorManager.registerListener(sensorEventListener,
    57. sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI);
    58. }
    59. }

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

  • 相关阅读:
    EIP-3523:半同质代币介绍
    C# OpenCvSharp 环形文字处理 直角坐标与极坐标转换
    C语言 题目 1701: 数据结构-自顶向下的赫夫曼编码
    Linux内存管理(二):页面查询过程简述
    css的运用
    manim边学边做--MathTex
    计算机毕业设计ssm+vue+elementUI服装定制系统
    保研/考研复试-数据结构
    webpack + vite 前端构建工具
    理解HTTPS/TLS/SSL(二)可视化TLS握手过程并解密加密数据
  • 原文地址:https://blog.csdn.net/aaajj/article/details/132796297