我使用此代码尝试:
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();
但是我的应用程序没有重现任何声音。
我如何解决我的问题?
答案 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