从扬声器 android 播放声音
Posted
技术标签:
【中文标题】从扬声器 android 播放声音【英文标题】:Play sound from speaker android 【发布时间】:2014-03-11 20:36:34 【问题描述】:我用这段代码试试:
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();
但我的应用无法重现任何声音。
我该如何解决我的问题?
【问题讨论】:
您确定您的 URI 已正确解析?根据developer.android.com/reference/android/net/Uri.html 的说法,这个类并没有做太多检查,并且很乐意将垃圾扔回给它的用户。我对“url.mp3”字符串很怀疑,这个文件存放在哪里? 网址正确。我写“url.mp3”很简单。 【参考方案1】:根据 OP,可以使用 MediaPlayer 找到最佳答案(此答案的 cmets 部分提供了示例链接)。
-- 以前的编辑--
尚未对此进行测试,如果有问题请见谅,但我认为通过设置铃声的默认值然后调用该默认值可能会更好。我还没有机会测试代码,但它应该看起来像......
要将音频路由到您的听筒:
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_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
【讨论】:
您的意思是您不想让扬声器播放它,或者它没有使用我的代码播放? 使用您的解决方案,声音可以正常播放,而不是通过通话期间使用的扬声器播放.. 哦,所以你想让它通过耳机而不是铃声扬声器播放? 我想模拟通话..我想重现声音,让它看起来像是来自通话.. 确保在 AudioManager 中将扬声器设置为 false(您不希望它通过扬声器)以上是关于从扬声器 android 播放声音的主要内容,如果未能解决你的问题,请参考以下文章