Android 如何检查和重定向有线耳机和扬声器电话之间的音频?
我正在开发一个简单的应用程序,它可以在扬声器手机和有线耳机之间切换,在按键事件中播放音频。我试图使用isWiredHeadsetOn()函数,但它说,对于Android API 5级以后的版本,这是不推荐的。那么,如何通过有线耳机检查当前是否正在播放音频,以便将其重定向到手机扬声器 注意:我在启动应用程序时,将耳机插入手机的3.5毫米插孔 这是我迄今为止对代码的尝试:Android 如何检查和重定向有线耳机和扬声器电话之间的音频?,android,soundpool,android-audiomanager,Android,Soundpool,Android Audiomanager,我正在开发一个简单的应用程序,它可以在扬声器手机和有线耳机之间切换,在按键事件中播放音频。我试图使用isWiredHeadsetOn()函数,但它说,对于Android API 5级以后的版本,这是不推荐的。那么,如何通过有线耳机检查当前是否正在播放音频,以便将其重定向到手机扬声器 注意:我在启动应用程序时,将耳机插入手机的3.5毫米插孔 这是我迄今为止对代码的尝试: protected void onCreate(Bundle savedInstanceState) { super.o
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audio_re_direct);
redirect = (Button)findViewById(R.id.redirect);
final AudioManager audio =(AudioManager)getApplicationContext().getSystemService(AUDIO_SERVICE);
redirect.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(audio.isWiredHeadsetOn())
{
audio.setWiredHeadsetOn(false);
audio.setSpeakerphoneOn(true);
Toast.makeText(getApplicationContext(), "SpeakerPhone On", Toast.LENGTH_LONG).show();
redirect.setText("Turn on headset");
}
else
{
audio.setSpeakerphoneOn(false);
audio.setWiredHeadsetOn(true);
Toast.makeText(getApplicationContext(), "Wired Headset On", Toast.LENGTH_LONG).show();
redirect.setText("Turn off headset");
}
}
});
}
但该应用程序根本无法切换。最初,它检测到有线耳机存在,显示Toast信息扬声器打开,就这样。它不会在两者之间切换
有人请帮我做这件事。谢谢。您必须注册一个用于操作\u耳机\u插头目的的接收器,并创建一个接收器类来捕获广播,您可以实现自己的逻辑
最终,我通过这种变通方法解决了自己的问题(正如@noelicus所建议的):
发布供其他可能像我一样陷入困境的人参考。:) 是的,但我如何通过编程启用和禁用有线耳机?好吧,
setWiredHeadsetOn
自API级别5以来一直被弃用,因此它无法工作。有没有其他替代方案?如果您知道可以浏览AudioManager
和TelephonyManager
类的源代码,请发布,然后使用反射来完成您想要的操作。我没有使用这些类的反射示例,但您可以搜索示例。我想知道您是否已将音频输入(麦克风设备)重定向到麦克风耳机,因为我希望它连接到3.5毫米插孔时,能够将音频输入和输出重定向到耳机。答复
AudioManager mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
mVolumeButton = (Button)findViewById(R.id.btn_Volume);
mVolumeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mAudioMgr.isWiredHeadsetOn()){
mAudioMgr.setWiredHeadsetOn(false);
mAudioMgr.setSpeakerphoneOn(true);
mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION);
Toast.makeText(getApplicationContext(), "SpeakerPhone On", Toast.LENGTH_LONG).show();
}else{
mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioMgr.setSpeakerphoneOn(false);
mAudioMgr.setWiredHeadsetOn(true);
Toast.makeText(getApplicationContext(), "Wired Headset On", Toast.LENGTH_LONG).show();
}
}
});