MediaPlayer
播放音频和视频的主要API。
AudioManager
管理音频资源和音频输出 。
需要的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />:如果应用需要唤醒屏幕或者唤醒进程,或者使用MediaPlayer.setScreenOnWhilePlaying() or MediaPlayer.setWakeMode() methods,方法,需要该权限。
MediaPlayer 可以使用的资源有:
a)本地资源;
b)内部URI(ContentPRovider)
c)外部的URI
使用raw资源的例子
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1); mediaPlayer.start(); // no need to call prepare(); create() does that for youURI 的例子Uri myUri = ....; // initialize Uri hereMediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(getapplicationContext(), myUri);mediaPlayer.prepare();mediaPlayer.start();HTTP 的例子String url = "http://........"; // your URL hereMediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(url);mediaPlayer.prepare(); // might take long! (for buffering, etc)mediaPlayer.start();异步的准备工作:
调用prepare()会花比较长的时间来执行,因为它包括读取和解码媒体数据。所以不能在UI主线程来调用该方法!!!会造成ANR。
避免这种情况,使用另外一个线程来prepare;
使用prepareAsync()方法可以直接完成上面的事情。这个方式在后台开始准备资源,快速反馈结果。当资源准备好,onPrepared()方法会被调用,该方法在MediaPlayer.OnPreparedListener,中,使用 setOnPreparedListener()可以配置。
final MediaPlayer mMediaPlayer = new MediaPlayer(); mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); } });mMediaPlayer.prepareAsync();管理状态
start(), pause(), seekTo(), stop()
使用wake locks(唤醒)
mMediaPlayer = new MediaPlayer();// ... other initialization here ...mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);如果使用的的网络资源文件,还需要使用WifiLockWifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE)) .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");wifiLock.acquire();播放结束后wifiLock.release()播放结束后,清理mMediaPlayer.release();
新闻热点
疑难解答