根据 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_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();
不得不快速输入这种类型,可能会错过一些只是没有想到的东西。不过,有一个很好的链接:在 Android 中设置铃声