2011-12-23 6 views
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(); 
      } 
     } 
} 

ありがとうございます。

+0

私も同様の質問がありましたが、これも答えられていません:http://www.anddev.org/novice-tutorials-f8/how-to-programmatically-turn-on-loudspeaker-when-make-receiv- t49421.html。 Androidのバグですか? – AllSolutions

+0

私の答えを見てください:http://stackoverflow.com/a/25346769/2826409 –

答えて

5

同様の質問は、私は答えは、プロジェクトのAndroidManifest.xmlをしてかもしれないと思う尋ねたとhere.

に答えました。あなたのアプリがデバイスのオーディオ設定を変更できるようにする:

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

をマニフェストに追加してみてください。スピーカーを設定するのを忘れないでください

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

しかし、心に留めておく:
あなたはまた、MODE_IN_CALLにごaudioManagerモードを変更する必要があります。

audioManager.setMode(AudioManager.MODE_IN_CALL) 
9

あなたは以下のように、プログラムを通してそれを設定することができますマニフェストで

audioManager.setSpeakerphoneOn(false); 

そして、セット許可:オフ時にコールを停止

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

このコードはうまく動作しています。あなたの役に立つでしょう。

+0

ありがとう。 Kitkat 4.4.2では、RECORD_AUDIOの権限は必要ありません。私は他のアンドロイドバージョンについては言えません。 –

関連する問題