Android 之摇一摇录音(加速度传感器)

来源:互联网 发布:编程中什么是栈 编辑:程序博客网 时间:2024/05/22 12:24

现在就要实现摇一摇能录音的一个效果~

这是使用加速度传感器实现的

还附加了震动的效果

录音停止之后,还能播放录音~

不过要使用真机测试~

代码如下:

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <TextView         android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/start"        android:textColor="#ff0000"/>    <Button         android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="stop"        android:text="停止"        android:textColor="#00ff00"/>    <Button         android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="play"        android:text="播放"        android:textColor="#0000ff"/>   </LinearLayout>

MainActivity:

public class MainActivity extends Activity implements SensorEventListener{//sensor管理器private SensorManager sensorManager;//震动private Vibrator mVibrator;private TextView start;private MediaRecorder mediaRecorder;private MediaPlayer mediaPlayer;public void stop(View view){mediaRecorder.stop();start.setVisibility(View.GONE);mediaRecorder.release();//释放资源Toast.makeText(MainActivity.this, "录制完成", 0).show();}public void play(View view){try {//这个是录音的存储位置和名字String path=Environment.getExternalStorageDirectory().getAbsolutePath()+"/bb.amr";mediaPlayer.setDataSource(path);mediaPlayer.prepare();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} mediaPlayer.start();}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);start=(TextView) findViewById(R.id.start);sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);mVibrator=(Vibrator) getSystemService(VIBRATOR_SERVICE);mediaPlayer=new MediaPlayer();//通过MediaRecorder录制音频//1.创建mediaRecorder=new MediaRecorder();   //2.调用MediaRecorder对象的方法来设置声音来源mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//3.设置录制的音频格式mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//4.设置编码格式mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//5.设置保存路径mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/bb.amr");//6.进入准备录制的状态try {mediaRecorder.prepare();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overrideprotected void onResume() {// TODO Auto-generated method stub//传感器的绑定sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_UI);super.onResume();}@Overrideprotected void onStop() {// TODO Auto-generated method stub//传感器的解除绑定sensorManager.unregisterListener(this);super.onStop();}@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stubswitch (event.sensor.getType()) {      case Sensor.TYPE_ACCELEROMETER:      if(Math.abs(event.values[0])>15||Math.abs(event.values[1])>15||Math.abs(event.values[2])>15){mVibrator.vibrate(100);System.out.println("111111111111111111111");start.setText("开始录制中...");System.out.println("222222222222222");Toast.makeText(MainActivity.this, "开始录制", 0).show();mediaRecorder.start();   }       break;       default: break;}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}}


还要加上权限:

   <uses-permission android:name="android.permission.VIBRATE"/>    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.RECORD_AUDIO"/>    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

源码:http://download.csdn.net/detail/qq_33642117/9584996



0 0
原创粉丝点击