在android API 的media包中有三种方式可供我们选择,它们分别是Ringtone,SoundPool,MediaPlayer。
MediaPlayer 适合比较长且对时间要求不高的情况
Ringtone 铃声,闹钟,提示音等
SoundPool 适合短促且对反应速度比较高的情况(游戏音效或按键声等,音频流组合音)
RingtonePlayer.java 分析
首先看start()函数
@Override
public void start() {
mAsyncPlayer.setUsesWakeLock(mContext);
mAudioService = IAudioService.Stub.asInterface(
ServiceManager.getService(Context.AUDIO_SERVICE));
try {
mAudioService.setRingtonePlayer(mCallback);
} catch (RemoteException e) {
Log.e(TAG, "Problem registering RingtonePlayer: " + e);
}
}