加速度传感器 摇一摇切歌

package com.bwie.a1511kday5sensor;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {

private Button btn;
private TextView textView;
private SensorManager sensorManager;
private List<Sensor> sensors;
private int[] musics = {R.raw.music1,R.raw.music2,R.raw.music3,R.raw.music4};
int index = 0;
private MediaPlayer mp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //播放音乐
    mp = MediaPlayer.create(this, musics[index]);
    mp.start();


    btn = (Button) findViewById(R.id.button);
    textView = (TextView) findViewById(R.id.textView);
    //得到传感器管理器
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

    //获得加速度传感器,测试
    Sensor sensor1 = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    //添加传感器的监听
    sensorManager.registerListener(new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            //获得xyz三轴的值的改变,显示在屏幕中
            StringBuffer sb = new StringBuffer();
            sb.append("x:");
            sb.append(event.values[0]);
            sb.append("\n\t");
            sb.append("y:");
            sb.append(event.values[1]);
            sb.append("\n\t");
            sb.append("z:");
            sb.append(event.values[2]);
            sb.append("\n\t");
            textView.setText(sb.toString());
            Log.i("main",sb.toString());

            //甩歌功能
            if(event.values[2] > 12){//z轴的变化大于12,表示刻意的甩动
                mp.stop();
                mp.release();
                index++;
                index = index%musics.length;
                mp = MediaPlayer.create(MainActivity.this,musics[index]);
                mp.start();
            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }
    },sensor1,SensorManager.SENSOR_DELAY_UI);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //获得本机的传感器
            sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
            StringBuffer sb = new StringBuffer();
            //遍历,得到所有传感器
            for(int i=0;i<sensors.size();i++){
                Sensor sensor = sensors.get(i);
                sb.append(sensor.getName()+"\n\t");
            }
            textView.setText(sb.toString());
        }
    });
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现Android手机上摇一摇功能的算法步骤如下: 1. 获取加速度传感器数据:通过注册传感器事件监听器,获取手机加速度传感器的数据。 2. 计算加速度变化量:对获取到的数据进行处理,得到三轴方向上的加速度变化量。 3. 判断是否摇动:根据加速度变化量的大小和变化频率,判断用户是否在摇动手机。可以设置一个阈值,当加速度变化量超过该阈值时,认为用户正在进行摇动操作。 4. 触发事件:当用户摇动手机时,可以触发相应的事件,例如播放音效、震动等。 下面是一段简单的代码示例,实现了Android手机上摇一摇功能: ```java public class ShakeActivity extends AppCompatActivity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mAccelerometer; private static final int SHAKE_THRESHOLD = 800; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shake); mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); } @Override protected void onResume() { super.onResume(); mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; float acceleration = (float) Math.sqrt(x * x + y * y + z * z); if (acceleration > SHAKE_THRESHOLD) { // 触发事件,例如播放音效、震动等 } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // do nothing } } ``` 在该代码中,我们通过注册传感器事件监听器,获取手机加速度传感器的数据,并根据加速度变化量的大小和变化频率,判断用户是否在摇动手机。当用户摇动手机时,可以触发相应的事件,例如播放音效、震动等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jonly_W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值