メディアプレーヤーでファイルを再生し、スピーカーのオン/オフ、ヘッドセットでの再生、Bluetoothなどのオプションを提供したい。 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);
PS:私はこの許可をマニフェストで与えました:
Android.permission.MODIFY_AUDIO_SETTINGS
このようなものは一部のデバイスで動作する可能性があります(私は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.
組み合わせ FOR_MEDIA, FORCE_SPEAKER
は通常、FMラジオのオーディオをスピーカーにルーティングするために内部でのみ使用されます(FMラジオでは、アンテナとして機能する有線ヘッドセット/ヘッドフォンを接続する必要があるため)。 FMラジオ機能を持たない(または代替の実装を使用する)デバイスは、このパラメーターの組み合わせを無視する可能性があるため、このメソッドはそのようなデバイスでは機能しません。
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();
}
}
});
リアスピーカーまたはフロントイヤーピースのいずれかを同時に入手できます。
アクセサリが接続されていない場合;
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
に設定して、それに応じてオーディオをルーティングします。
uでスピーカーフォンを開きたいだけの場合は、アクティビティのoncreate()にこの行を書き込みます。
static AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
問題が解決しました。まだ答えを探している皆さんのために。これはバグではなく、トリッキーなことです。 PhoneStateListenerを使用する必要があります
このガイドの使用: http://danielthat.blogspot.co.il/2013/06/Android-make-phone-call-with-speaker-on.html
これを試して。
AudioManager audioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
if (isOn) {
isOn = false;
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setMode(AudioManager.MODE_NORMAL);
} else {
isOn = true;
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.setMode(AudioManager.MODE_IN_CALL);
}
audioManager.setSpeakerphoneOn(isOn);
コードスニペットに従ってください:
//for spearphone on
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.setSpeakerphoneOn(true);
//for headphone on
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(false);
ところで、私はAndroid 7.0(Redmi 4x)でテストしましたが、うまくいきました。