Android 通过蓝牙采集音频

通过蓝牙的麦克风进行录音

MainActivity.java

package com.example.bluetothrecord;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

	private String TAG = "BluetoothRecord";
	private static String mFileName = null;
	private AudioManager mAudioManager = null;
	private MediaRecorder mRecorder = null;
	private Button startRecordButton;
	private Button stopRecordButton;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
		
		startRecordButton = (Button)findViewById(R.id.button1);
		stopRecordButton = (Button)findViewById(R.id.button2);
		startRecordButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				startRecording();
			}
		});
		stopRecordButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				stopRecording();
			}
		});
	}


	//record
	private void startRecording(){
		
		mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
		mFileName += "/record.3gp";
		mRecorder = new MediaRecorder();
		mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
		mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
		mRecorder.setOutputFile(mFileName);
		mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
		try {
			mRecorder.prepare();
		} catch (Exception e) {
			// TODO: handle exception
			Log.i(TAG, "prepare() failed!");
		}
		if (!mAudioManager.isBluetoothScoAvailableOffCall()) {
			Log.i(TAG, "系统不支持蓝牙录音");
			return;
		}
		Log.i(TAG, "系统支持蓝牙录音");
		mAudioManager.stopBluetoothSco();
		mAudioManager.startBluetoothSco();//蓝牙录音的关键,启动SCO连接,耳机话筒才起作用
		
		registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1);
                
                if (AudioManager.SCO_AUDIO_STATE_CONNECTED == state) { 
                	Log.i(TAG, "AudioManager.SCO_AUDIO_STATE_CONNECTED");
                	mAudioManager.setBluetoothScoOn(true);  //打开SCO
                	Log.i(TAG, "Routing:" + mAudioManager.isBluetoothScoOn());
                    mAudioManager.setMode(AudioManager.STREAM_MUSIC);
                	mRecorder.start();//开始录音
                    unregisterReceiver(this);  //别遗漏
               }else {//等待一秒后再尝试启动SCO
                    try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                	e.printStackTrace();
                }
                    mAudioManager.startBluetoothSco(); 
                    Log.i(TAG, "再次startBluetoothSco()");
                    
                }
            }
        }, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED));
    }
	
	
	private void stopRecording(){
		//mAudioManager.stopBluetoothSco();
		mRecorder.stop();
		mRecorder.release();
		mRecorder = null;
		if (mAudioManager.isBluetoothScoOn()) {
			mAudioManager.setBluetoothScoOn(false);
			mAudioManager.stopBluetoothSco();
		}
	}
}

加上权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>

工程文件:http://download.csdn.net/detail/charein/6341277


版权声明:本文为Charein原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。