[英]Force audio to speaker when headphone is plugged in?
这是我的代码,我想同时打开耳机和扬声器 请编辑我的代码,因为我是编程初学者,我也尝试多次使用 AudioManager.Mode_Stream 但当我这样做时我什么也没听到
package meracal.myapplicationlive;
import android.content.Context;
import android.media.audiofx.AcousticEchoCanceler;
import android.provider.MediaStore;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.media.*;
import android.view.View;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
Button start, stop;
boolean isRecording = false;
AudioManager am = null;
AudioRecord record = null;
AudioTrack track = null;
MediaPlayer mplayer = null;
MediaRecorder mrecord = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initRecordAndTrack();
am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.STREAM_RING);
am.setSpeakerphoneOn(true);
am.setBluetoothScoOn(true);
am.startBluetoothSco();
am.setBluetoothScoOn(true);
(new Thread() {
@Override
public void run() {
recordAndPlay();
}
}).start();
start = (Button) findViewById(R.id.btnstart);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isRecording) {
startRecordAndPlay();
}
}
});
stop = (Button) findViewById(R.id.btnsstop);
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isRecording) {
stopRecordAndPlay();
}
}
});
}
private void initRecordAndTrack() {
int min = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
record = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,
min);
track = new AudioTrack(AudioManager.MODE_IN_COMMUNICATION, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, min,
AudioTrack.MODE_STREAM);
}
private void recordAndPlay() {
short[] lin = new short[1024];
int num = 0;
am.setMode(AudioManager.MODE_IN_COMMUNICATION);
am.setSpeakerphoneOn(true);
while (true) {
if (isRecording) {
num = record.read(lin, 0, 1024);
track.write(lin, 0, num);
}
}
}
private void startRecordAndPlay() {
record.startRecording();
track.play();
am.setSpeakerphoneOn(true);
isRecording = true;
}
private void stopRecordAndPlay() {
record.stop();
track.pause();
isRecording = false;
}
}
这里的代码可能会强制通过扬声器播放音频:
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
这对我有用
首先,我在 Manifest.xml 中添加了权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
然后,我使用了这个:
AudioManager m_amAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
m_amAudioManager.setMode(AudioManager.MODE_RINGTONE | AudioManager.MODE_IN_CALL);
m_amAudioManager.setSpeakerphoneOn(true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.