1

電話が鳴っているときにBluetoothヘッドセットで再生するサウンド(つまり、人の名前を表す小さなwavファイル-自動生成されない)を取得しようとしています。基本的に、Bluetoothデバイスのデフォルトのリングを置き換え、発信者の名前に置き換えます!...まあ、とにかく...それは機能していません。

アクティビティ内でヘッドセットでwavファイルを直接再生できましたが、放送受信機のonReceive機能に移動すると、携帯電話が鳴っているときにヘッドセットで同じサウンドを再生できません...

何かが足りない気がします。このコードを修正するために私にできることはありますか?

前もって感謝します

public void onReceive(Context context, Intent intent) {

    mContext = context;
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

    if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
    {
        System.out.println("Its Ringing");

        AudioManager am = (AudioManager) mContext.getSystemService(mContext.AUDIO_SERVICE); 
        am.setBluetoothScoOn(true); 
        am.startBluetoothSco();
        am.setMode(AudioManager.MODE_NORMAL); 

        try{
            AssetFileDescriptor afd = mContext.getAssets().openFd("my.wav");
            MediaPlayer player = new MediaPlayer();
            player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);

            player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

            player.setOnPreparedListener(new OnPreparedListener(){
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });

            player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
            player.prepareAsync();

        }catch(IOException ioe){
            System.err.println(ioe.getLocalizedMessage());
        }}}
4

1 に答える 1

0

時間がかかる場合があるため、電話を受ける前にメディア プレーヤーの準備/設定を行ってください。また、 am.setMode(AudioManager.MODE_NORMAL); を削除すると、 am.setMode(AudioManager.STREAM_VOICE_CALL); に置き換えることができます。ただし、BT デバイスがペアリング/セットアップされている場合は、すでにそのモードになっているはずなので、おそらく必要ありません。

于 2013-12-26T16:40:04.930 に答える