通过蓝牙的麦克风进行录音
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"/>
版权声明:本文为Charein原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。