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

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

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

还附加了震动的效果

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

不过要使用真机测试~

代码如下:

布局:

<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 block
			e.printStackTrace();
		} 
		mediaPlayer.start();
	}

	@Override
	protected 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 block
			e.printStackTrace();
		}
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		//传感器的绑定
		sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
				SensorManager.SENSOR_DELAY_UI);
		super.onResume();
	}
	
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		//传感器的解除绑定
		sensorManager.unregisterListener(this);
		super.onStop();
	}
	
	@Override
	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		switch (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;
		}
		
		
	}

	@Override
	public 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值