Java 从扬声器播放声音

Java 从扬声器播放声音,java,android,audio,headset,speaker,Java,Android,Audio,Headset,Speaker,我使用此代码尝试: AudioManager audioManager = (AudioManager)getApplication().getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerphoneOn(true); 然后: Ringtone r = RingtoneManager.ge

我使用此代码尝试:

AudioManager audioManager = (AudioManager)getApplication().getSystemService(Context.AUDIO_SERVICE); 
        audioManager.setMode(AudioManager.MODE_IN_CALL);
        audioManager.setSpeakerphoneOn(true);
然后:

Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), Uri.parse("url.mp3"));
                        r.play();
但我的应用程序不会重现任何声音


如何解决我的问题?

根据OP,可以使用MediaPlayer找到最佳答案(该答案的评论部分给出了一个示例链接)

--以前的编辑--

我还没有测试过这个,所以请原谅我,如果它有问题,但我认为它可能会更好地通过设置铃声的默认值,然后调用默认值。我还没有机会测试代码,但它应该看起来像

要将音频传送到耳机,请执行以下操作:

private AudioManager audioManager;  
audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  
audioManager.setMode(AudioManager.MODE_IN_CALL); 
audioManager.setSpeakerphoneOn(false);
然后看看AudioTracks,这可能是你想要做的事情,因为Ringtone的默认操作基于Android的本地处理;应该是这样的

InputStream in =getResources().openRawResource("user_mp3");      
AudioTrack audio = new AudioTrack(AudioManager.STREAM_MUSIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize, AudioTrack.MODE_STREAM);

byte[] sound = null;
sound = new byte[in.available()]; 
sound =convertStreamToByteArray(in);
in.close();
audio.write(sound, 0, sound.length());
audio.play();
但在完成后,请务必使用AudioManager将您的模式设置回正常状态。我认为这应该行得通。还有不推荐使用的AudioManager.ROUTE_耳机呼叫,您可能想检查一下,看看他们是如何替换它的

再说一次,我没有时间测试这个,只是快速地把它打出来。如果发现错误,请告诉我

我的原始“铃声”样式输出:

Uri soundPath = Uri.parse("uri_link_for_mp3");
RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), 
        RingtoneManager.TYPE_RINGTONE, soundPath);

Uri ringtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), ringtone);
r.play();

必须快速输入,可能会错过一些东西,只是没有想到而已。不过有一个很好的链接:

您确定您的URI解析正确吗?根据then的说法,这个类不做太多检查,并且很乐意将垃圾扔回给它的用户。我非常怀疑“url.mp3”字符串,这个文件存储在哪里?url是正确的。我写的“url.mp3”很简单。你的意思是你不想让扬声器播放它,或者它不想播放我的代码?在你的解决方案中,声音是正常播放的,而不是通过通话中使用的扬声器。哦,你想让它通过耳机而不是铃声扬声器播放吗?我想模拟通话。我想重现声音,让它看起来像是来自电话。确保在AudioManager中将您的扬声器设置为false(您不希望它通过扬声器电话)