播放扬声器安卓的声音

时间:2014-03-11 20:36:34

标签: 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.getRingtone(getApplicationContext(), Uri.parse("url.mp3"));
                        r.play();

但是我的应用程序没有重现任何声音。

我如何解决我的问题?

1 个答案:

答案 0 :(得分:1)

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

- 以前的编辑 -

Haven没有对此进行测试,请原谅我是否有错误,但我认为通过设置铃声的默认值然后调用该默认值可能会更好。我还没有机会测试代码,但它应该看起来像......

将音频传送到听筒:

private AudioManager audioManager;  
audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  
audioManager.setMode(AudioManager.MODE_IN_CALL); 
audioManager.setSpeakerphoneOn(false);

然后查看AudioTracks,这可能是你想要做的事情的方式,因为铃声有基于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_EARPIECE调用,你可能想要查看它们是如何替换它的。

同样,没有时间对此进行测试,只需动态输入即可。如果您发现错误,请告诉我。

我的原创"铃声"样式输出:

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();

不得不快速打字,可能错过了一些不考虑它的事情。但是有一个很好的链接:Setting Ringtone in Android