首页 > 学院 > 开发设计 > 正文

MediaPlayer

2019-11-08 00:05:21
字体:
来源:转载
供稿:网友

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

如果使用的的网络资源文件,还需要使用WifiLock

WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE))    .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");wifiLock.acquire();

播放结束后

wifiLock.release()

播放结束后,清理

mMediaPlayer.release();


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表