Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按按钮在耳机和扬声器之间切换_Android_Button_Toggle_Speakerphone - Fatal编程技术网

Android 按按钮在耳机和扬声器之间切换

Android 按按钮在耳机和扬声器之间切换,android,button,toggle,speakerphone,Android,Button,Toggle,Speakerphone,我试图通过在扬声器和听筒之间切换按钮来播放扬声器和听筒的音频。问题是,我试图默认从耳机播放音频,但什么都没有出来。然后当我按下按钮切换到扬声器时,仍然没有音频播放。我正在播放本地原始文件 我在清单中也有android.permission.MODIFY_AUDIO_设置 这是我的密码: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); c

我试图通过在扬声器和听筒之间切换按钮来播放扬声器和听筒的音频。问题是,我试图默认从耳机播放音频,但什么都没有出来。然后当我按下按钮切换到扬声器时,仍然没有音频播放。我正在播放本地原始文件

我在清单中也有android.permission.MODIFY_AUDIO_设置

这是我的密码:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    context = getActivity().getBaseContext();

    am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

    am.setMode(AudioManager.MODE_IN_CALL);
    am.setSpeakerphoneOn(false);
    am.setBluetoothScoOn(true);
    speakerON = false;
}

@Override
public void onClick(View v)
{               
    switch (v.getId())
    {

        case R.id.buttonSpeaker:
            if(!speakerON)//speaker off
            {
                speakerON = true;
                am.setMode(AudioManager.MODE_NORMAL);
                am.setSpeakerphoneOn(true);
                am.setBluetoothScoOn(false); 
                speaker.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_lock_silent_mode_off, 0, 0, 0);
            }
            else
            {
                speakerON = false;
                am.setMode(AudioManager.MODE_IN_CALL);
                am.setSpeakerphoneOn(false);
                am.setBluetoothScoOn(true);
                speaker.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_lock_silent_mode, 0, 0, 0);
            }

            break;

    }
}
下面是我如何设置MediaPlayer的:

mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), R.raw.test_message);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mediaPlayer.start();

结果是我把模式设置错了

以下是更新的媒体播放器:

mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), R.raw.test_message);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.start();
然后我将音频管理器的模式设置为:

context = getActivity().getBaseContext();

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

然后它成功了。因此,请确保媒体播放器和音频管理器处于相同的模式。

根据javadocs,对AudioManager的调用。setMode(..)仅采用以下常量:mode_NORMAL、mode_RINGTONE、mode_in_call或mode_in_COMMUNICATION。基本上,AudioManager.STREAM_MUSIC和mode_in_call是相同的值。应该是通话中的模式。它在上述情况下有效,因为我相信两者都有值“3”。然而,正如Ivan所指出的,我们应该在通话中使用MODE_。您好,迈克,在播放存储在SD卡上的mp3时,我必须在扬声器模式和听筒模式之间切换。我尝试了你的上述代码,但无法做到这一点。你能详细说明一下点击操作吗?切换音频管理器模式后,我们是否需要再次准备mediaplayer?老实说,我可能不是最好的帮助来源。我已经转到其他不是Windows phone的项目。祝你好运。