1

我正在尝试在手机响铃时通过蓝牙耳机播放声音(即代表人名的小 wav 文件 - 不是自动生成的)。本质上它将替换蓝牙设备的默认铃声并将其替换为呼叫者的姓名!......好吧,无论如何......它不起作用。

我已经能够在活动中直接在耳机上播放 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 回答