9

スピーカーフォンとイヤピースの両方からボタンを切り替えてオーディオを再生しようとしています。問題は、オーディオをイヤホンから再生するようにデフォルト設定しようとしているのですが、何も出力されないことです。次に、ボタンを押してスピーカーフォンに切り替えても、まだ音声が再生されません。ローカルの raw ファイルから再生しています。

マニフェストにも android.permission.MODIFY_AUDIO_SETTINGS があります。

これが私のコードです:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    context = getActivity().getBaseContext();

    am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

    am.setMode(AudioManager.MODE_IN_CALL);
    am.setSpeakerphoneOn(false);
    am.setBluetoothScoOn(true);
    speakerON = false;
}

@Override
public void onClick(View v)
{               
    switch (v.getId())
    {

        case R.id.buttonSpeaker:
            if(!speakerON)//speaker off
            {
                speakerON = true;
                am.setMode(AudioManager.MODE_NORMAL);
                am.setSpeakerphoneOn(true);
                am.setBluetoothScoOn(false); 
                speaker.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_lock_silent_mode_off, 0, 0, 0);
            }
            else
            {
                speakerON = false;
                am.setMode(AudioManager.MODE_IN_CALL);
                am.setSpeakerphoneOn(false);
                am.setBluetoothScoOn(true);
                speaker.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_lock_silent_mode, 0, 0, 0);
            }

            break;

    }
}

MediaPlayer の設定方法は次のとおりです。

mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), R.raw.test_message);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mediaPlayer.start();
4

1 に答える 1

11

モードを間違って設定したことがわかりました。

更新されたメディアプレーヤーは次のとおりです。

mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), R.raw.test_message);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.start();

次に、オーディオマネージャのモード​​を次のように設定します。

context = getActivity().getBaseContext();

am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);        
am.setMode(AudioManager.MODE_IN_CALL);
am.setSpeakerphoneOn(false);

そして、それはうまくいきました。したがって、メディアプレーヤーとオーディオマネージャーが同じモードになっていることを確認してください。

于 2012-07-30T20:13:43.270 に答える