8

UDP ソケット経由で受信したサウンドを再生するために AudioTrack を使用しています。音とともに多くのノイズが発生するので、AudioManager を使用することにしました。しかし、AudioManager は、アプリケーションの境界を超えてサウンド ルーティングを変更します。以下は私が使用しているコードです。

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

このコードの問題は、アプリを閉じて音楽プレーヤーを起動すると、サウンドが通常のバックスピーカーではなくフロントスピーカーから聞こえ、どうにかして変更できないことです。この問題を解決するために、アプリを閉じるときに次の行を追加することにしました。

 m_amAudioManager.setSpeakerphoneOn(true);

しかし、この行の問題は、電話 (通常の電話) を受信すると、デフォルトでスピーカーがオンになっていることです。これについて本当に助けが必要です。

4

2 に答える 2

13

まず、AudioManager設定を変更するには、マニフェストでユーザー権限MODIFY_AUDIO_SETTINGSを宣言する必要があります。

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  1. 設定を変更する前に、現在のAudioManager設定を保存する必要があります。

    oldAudioMode = audioManager.getMode();
    oldRingerMode = audioManager.getRingerMode();
    isSpeakerPhoneOn = audioManager.isSpeakerphoneOn();
    
  2. オーディオ設定を適用します(例)

    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
    audioManager.setMode(AudioManager.MODE_NORMAL);
    audioManager.setSpeakerphoneOn(true);
    
  3. その後、終了時に設定を復元します

    audioManager.setSpeakerphoneOn(isSpeakerPhoneOn);
    audioManager.setMode(oldAudioMode);
    audioManager.setRingerMode(oldRingerMode);
    
于 2013-01-18T18:08:56.090 に答える
1

アプリを閉じるときに設定します。

m_amAudioManager.setMode(AudioManager.MODE_NORMAL);

于 2013-01-25T14:10:15.127 に答える