0

我使用此代码尝试:

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

但我的应用程序不会重现任何声音。

我该如何解决我的问题?

4

1 回答 1

1

根据 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 中设置铃声

于 2014-03-11T21:14:11.103 回答