我通过媒体播放器播放文件,我想提供扬声器开/关,播放耳机,蓝牙等选项.我尝试了下面的代码,它适用于Android 2.2,但我想要的东西也适用于2.2和4.0两者.你能帮我看看如何以编程方式打开/关闭扬声器并通过耳机播放吗?
AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
if(isOn){
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setMode(AudioManager.MODE_NORMAL);
}else{
//Seems that this back and forth somehow resets the audio channel
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.setMode(AudioManager.MODE_IN_CALL);
}
audioManager.setSpeakerphoneOn(isOn);
Run Code Online (Sandbox Code Playgroud)
PS:我在manifest中给出了这个权限:android.permission.MODIFY_AUDIO_SETTINGS权限
在我的应用程序中,我需要将麦克风的声音直接传送到扬声器.没有其他行动.我找到了一种方法,通过播放文件和关闭扬声器将声音从麦克风传送到听筒.所以我猜扬声器的工作方式类似.但是我不知道如何摆脱播放文件的事情.谢谢.
speaker() {
m_audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
m_audioManager.setSpeakerphoneOn(true); // not needed I think
//m_audioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL); earpiece need this?
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
m_audioManager.setMode(AudioManager.MODE_IN_CALL);
Run Code Online (Sandbox Code Playgroud) 此问题在此网站上已经被问过并回答了两次,但该代码似乎根本不适用于现代手机.我正在研究Android 4.2和Android 4.3,但似乎都不起作用.
我在通话期间通过媒体播放器播放MP3,它工作正常,但歌曲和通话都是通过语音扬声器传来的.如果我按"扬声器",他们都继续通过扬声器播放.我需要这种效果,但不必自己按下它
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
Run Code Online (Sandbox Code Playgroud)
建议将其作为SO的其他问题的解决方案,但它根本不起作用.它应该,代码很好,但它根本不对音频做任何事情.
思考?
我们希望从耳机插孔发送一些串行数据,但仍希望能够从扬声器播放音频.是否可以向两者发送输出?如果是这样,是否可以向每个发送不同的音频?
我正在尝试使用该android.net.rtp库来制作VoIP应用程序.它的音频流可以正确发送和接收.
我的问题是:被叫方手机的扬声器工作正常,但耳机始终静音(即使我关闭扬声器).
我的代码:
AudioManager Audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
Audio.setMode(AudioManager.MODE_IN_COMMUNICATION);
Audio.setSpeakerphoneOn(true);
Audio.setMicrophoneMute(false);
sender = new RtpStreamSender(null, "169.0.199.19", AudioCodec.PCMU);
Run Code Online (Sandbox Code Playgroud) 我正在使用OpenSL ES播放音频片段.在我的代码中我有
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
Run Code Online (Sandbox Code Playgroud)
在插入耳机时强制音频通过扬声器.它工作正常,但我无法控制音量.播放剪辑时按音量按钮可使音量搜索栏出现并移动,但音量不会改变.打电话setVolumeControlStream(AudioManager.STREAM_VOICE_CALL)或打电话setVolumeControlStream(AudioManager.STREAM_MUSIC)之前似乎没有帮助.更改我的应用程序之外的任何卷(例如,在Android设置中)不会影响播放音量.未应用路由时,音量控制在耳机和扬声器上均可正常工作.
我也尝试使用我在另一个答案中找到的代码将音频路由到扬声器
Class audioSystemClass = Class.forName("android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
// First 1 == FOR_MEDIA, second 1 == FORCE_SPEAKER. To go back to the default
// behavior, use FORCE_NONE (0).
setForceUse.invoke(null, 1, 1);
Run Code Online (Sandbox Code Playgroud)
但它不能在我的Android 4.3 Nexus 4上运行.无论如何,我需要最兼容的方式.
有任何想法吗?谢谢.
我需要一种python方式来发出系统/主板扬声器的声音,而不是连接到我电脑的扬声器.我并不总是打开扬声器,所以我需要发出主板扬声器的哔声.
我见过的所有图书馆(特别是winound),只是通过连接到我电脑的扬声器播放声音.我想给系统/主板扬声器发出嘟嘟声.
有没有办法让系统扬声器发出哔哔声?我很喜欢Windows依赖库.
我现在正在编写一个应用程序,以便在用户进行一些练习时通过内部扬声器提供声音反馈。
现在我想添加一个功能来记录用户的心跳并通过一个由 3.5 毫米插孔插入手机的听诊器呼吸。问题是当我插入插孔时,扬声器不会播放任何声音,因为手机认为耳机已连接并且声音将通过它们播放。
我想要实现的是通过插入手机的听诊器录制声音,同时通过内置扬声器播放声音。
基本上我使用两种方法来播放声音,MediaPlayer 和 TextToSpeech。
我在互联网上搜索,找到了这些文章:
他们告诉我要做的是添加权限 MODIFY_AUDIO_SETTINGS 到清单
声明变量:
MediaPlayer mediaPlayer;
AudioManager mAudioManager;
HashMap<String, String> mHashAlarm = new HashMap<String, String>();
Run Code Online (Sandbox Code Playgroud)
在 OnCreate 方法中?
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setSpeakerphoneOn(true);
mediaPlayer = MediaPlayer.create(context, R.raw.ding);
mHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC));
...
tts.speak(text, TextToSpeech.QUEUE_FLUSH, mHashAlarm);
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用。
有谁知道如何实现这个功能?任何想法都会有很大帮助。谢谢。
我对Galaxy S5有一个奇怪的设备特定问题.我正在使用SIP(Linphone)从Galaxy S5拨打另一台设备,当我启用免提电话时,设备开始使用其主麦克风作为降噪麦克风,其辅助麦克风作为主要麦克风.结果是我必须对设备背面说话,因为当我对着主麦克风讲话时,用户听不到我的声音.
AudioManager manager = (AudioManager) getSystemService(AUDIO_SERVICE);
manager.setSpeakerphoneOn(true);
Run Code Online (Sandbox Code Playgroud)
我使用此代码启用免提电话.我也尝试启用各种模式:
manager.setMode(AudioManager.MODE_NORMAL); //Also tested with other modes
Run Code Online (Sandbox Code Playgroud)
扬声器电话被禁用时没有问题.另外在标准拨号扬声器电话模式下工作得很好.无法在任何其他设备上重现此问题.
我想设置Iphone Speaker默认值.我的音量控制快速代码如下.它工作正常,但当我点击airplay按钮时,我看到自动选择第二个.(Iphone)
var wrapperView = UIView(frame: CGRectMake(10,40,(self.view.bounds.size.width)-20, 20))
wrapperView.backgroundColor=UIColor.purpleColor()
self.view.addSubview(wrapperView)
var volumeView = MPVolumeView(frame: wrapperView.bounds)
volumeView.tintColor=UIColor.purpleColor()
wrapperView.addSubview(volumeView)
Run Code Online (Sandbox Code Playgroud)
speaker ×10
android ×7
volume ×2
airplay ×1
android-4.0-ice-cream-sandwich ×1
audio ×1
headphones ×1
headset ×1
ios ×1
linphone ×1
microphone ×1
mpvolumeview ×1
opensl ×1
phone-call ×1
python ×1
rtp ×1
sip ×1
swift ×1