我正在开发一个简单的应用程序,它应该在扬声器电话和有线耳机之间切换,以播放按钮点击事件的音频。我正在尝试使用isWiredHeadsetOn()函数,但它说这对于Android API lvl 5及更高版本来说是不推荐的。那么,我如何通过有线耳机检查当前音频是否正在播放,以便我可以将其重定向到手机扬声器?
注意:我将耳机插入手机的3.5毫米插孔开始我的应用程序。
这是我迄今为止对代码的尝试:
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消息扬声器打开,就这样。它不会在两者之间切换。
有人请帮我把这件事做好。谢谢
您必须为ACTION_HEADSET_PLUG意图注册一个接收器,并创建一个接收器类来捕获该广播,您可以从中实现自己的逻辑,请检查此
最后设法解决了我自己的问题,使用这个工作(由@noelicus建议):
如何将耳机中的音频静音,但通过编程让它在扬声器上播放?
张贴以供其他可能像我一样陷入困境的人参考。:)
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();
}
}
});