6

私の要件は、発信コールが開始されるたびにスピーカーフォンをオンにすることです。次のコードを試しましたが、うまくいきません。実際、通話中に 2 番目の通話が着信すると、スピーカーフォンがオンになります。

package in.co.allsolutions;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
//import android.view.View;
import android.widget.Toast;
import android.media.AudioManager;

public class MyTelephonyBroadcastReceiver extends BroadcastReceiver {

      @Override
      public void onReceive(Context context, Intent intent) {

            AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            audioManager.setSpeakerphoneOn(true);
            Bundle extras = intent.getExtras();            
            if (extras != null) {

                  String state = extras.getString(TelephonyManager.EXTRA_STATE);
                  Log.i("AS", "Message Received. State = " + state + ", Mode = " + audioManager.getMode());
                  //audioManager.setMode(AudioManager.MODE_NORMAL);
                  //audioManager.setSpeakerphoneOn(true);
//                  if (state.equals("OFFHOOK"))
//                  {                  
                  //audioManager.setMode(AudioManager.MODE_CURRENT);
                  //audioManager.setSpeakerphoneOn(true);
                  //audioManager.setMode(AudioManager.MODE_IN_CALL);
                  //audioManager.setSpeakerphoneOn(true);
                  //audioManager.setMode(AudioManager.MODE_RINGTONE);
                  //audioManager.setSpeakerphoneOn(true);
                  if (audioManager.isSpeakerphoneOn()) {
                        Log.i("AS", "Speaker on - SUCCESS.");
                  } else {
                        Log.i("AS", "Speaker could not be turned on.");
                  }
//                  }
            } else {
                  Toast.makeText(context, "Message Received without any state", Toast.LENGTH_LONG).show();
            }
      }
}

ありがとう。

4

2 に答える 2

9

以下のようにプログラムで設定できます。

AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);

ただし、通話を停止するときにスピーカーをオフにすることを忘れないでください。

audioManager.setSpeakerphoneOn(false);

そして、マニフェストで許可を設定します。

  <uses-permission android:name="android.permission.RECORD_AUDIO" />
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

このコードは私にとってはうまく機能しています。

于 2014-01-24T09:04:37.260 に答える
5

同様の質問がされ、ここで回答されました。

答えはプロジェクトの AndroidManifest.xml にあると思います。追加してみてください:

uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"

これにより、アプリがデバイスのオーディオ設定を変更できるようになります。
また、audioManager モードを MODE_IN_CALL に変更する必要があります。

audioManager.setMode(AudioManager.MODE_IN_CALL)
于 2012-05-11T11:59:28.133 に答える