May*_*ara 19 android speaker android-4.0-ice-cream-sandwich
我通过媒体播放器播放文件,我想提供扬声器开/关,播放耳机,蓝牙等选项.我尝试了下面的代码,它适用于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权限
Mic*_*ael 26
这样的东西可能适用于某些设备(我只在XPeria P上测试过):
final static int FOR_MEDIA = 1;
final static int FORCE_NONE = 0;
final static int FORCE_SPEAKER = 1;
Class audioSystemClass = Class.forName("android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
setForceUse.invoke(null, FOR_MEDIA, FORCE_SPEAKER);
// To get back to the default behaviour, use the combination FOR_MEDIA,FORCE_NONE.
Run Code Online (Sandbox Code Playgroud)
该组合FOR_MEDIA, FORCE_SPEAKER通常仅在内部用于将FM无线电音频路由到扬声器(因为FM收音机要求您将有线耳机/耳机插入以充当天线).没有FM无线电功能(或使用替代实现)的设备可能会忽略此参数组合,因此此方法不适用于此类设备.
小智 5
您可以随时购买后置扬声器或前置听筒。
如果没有连接附件;
使用audioManager.setMode(AudioManager.MODE_IN_CALL);&audioManager.setSpeakerphoneOn(false);使用前置扬声器/听筒。但这会在听筒而不是扬声器上播放音频。要使用后置扬声器,请使用audioManager.setMode(AudioManager.MODE_NORMAL);&audioManager.setSpeakerphoneOn(true);
如果附件已连接;使用 audioManager.setMode(AudioManager.MODE_IN_CALL); & audioManager.setSpeakerphoneOn(false); 使用前置扬声器/听筒。但这会在听筒而不是扬声器上播放音频。要使用后置扬声器,请使用audioManager.setMode(AudioManager.MODE_IN_CALL);&audioManager.setSpeakerphoneOn(true);
注意:确保audioManager.setWiredHeadsetOn(boolean on)并audioManager.setBluetoothScoOn(boolean on)设置为false通过听筒路由音频。并设置为相应true地路由音频。
AudioManager mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
Button mVolumeButton = (Button)findViewById(R.id.btn_Volume);
mVolumeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mAudioMgr.isWiredHeadsetOn()){
mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
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();
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38362 次 |
| 最近记录: |