概述
将一个MediaPlayer控件分装
- 思路
- 单例模式
- 将原有的接口对外开放。
思路
1.只有一个对象,要使用单例模式
2.要考虑在多种条件下使用MediaPlayer的功能
3.通过构建内部接口,将原有的接口对外开放。
所有对MediaPlayer的操作都要通过封装好后的函数进行调用
单例模式
MediaPlayerHelp.java
private static MediaPlayerHelp instance;//null
public static MediaPlayerHelp getInstance(Context context){
if (instance == null){
synchronized (MediaPlayerHelp.class){
if (instance ==null){
instance = new MediaPlayerHelp(context);
}
}
}
return instance;
}
将原有的接口对外开放。
MediaPlayerHelp.java
private OnMediaPlayerHelpListener onMediaPlayerHelpListener;
public void setOnMediaPlayerHelpListener(OnMediaPlayerHelpListener onMediaPlayerHelpListener) {
this.onMediaPlayerHelpListener = onMediaPlayerHelpListener;
}
public interface OnMediaPlayerHelpListener{
void onPrepared(MediaPlayer mp);
}
mMediaPlayer.prepareAsync();
// 捕获异步加载完成的通知,调用onPrepared()函数
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// 将异步加载完成的通知外放出去,由外面的具体对象来决定实现什么函数,需要再定义一个内部接口
if (onMediaPlayerHelpListener != null){
onMediaPlayerHelpListener.onPrepared(mp);
}
}
});
在调用该封装对象的类中
mMpHelp.setOnMediaPlayerHelpListener(new MediaPlayerHelp.OnMediaPlayerHelpListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mMpHelp.start();
}
});
封装类的全部代码
package com.example.musicclouddemo.helps;
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import com.example.musicclouddemo.Utils.UserUtils;
import java.io.IOException;
/**
* 将所有功能配件放在一个文件中,通过对象来进行调用。
* 这种功能控件基本是一个单例模式
*传入上下文是标配。
* @ 功能
* Ctreate by barry on 2020/10/14.
*/
public class MediaPlayerHelp {
private static MediaPlayerHelp instance;//null
public static MediaPlayerHelp getInstance(Context context){
if (instance == null){
synchronized (MediaPlayerHelp.class){
if (instance ==null){
instance = new MediaPlayerHelp(context);
}
}
}
return instance;
}
private MediaPlayer mMediaPlayer;//null
private Context mContext;
private OnMediaPlayerHelpListener onMediaPlayerHelpListener;
private String mPath;//null
public void setOnMediaPlayerHelpListener(OnMediaPlayerHelpListener onMediaPlayerHelpListener) {
this.onMediaPlayerHelpListener = onMediaPlayerHelpListener;
}
/**
* 由于MediaPlayerHelp是单例,单例对象的字段也基本是单例。
* 上下文
* 初始化mediaPlayer;
* @param context
*/
private MediaPlayerHelp(Context context) {
mContext = context;
mMediaPlayer = new MediaPlayer();
// MediaPlayer.create()----播放固定音乐使用。
}
/**
* 网络音乐需要设置uri;setPath
* 2.start;
* 3.release
*/
/**
* 网络音乐需要设置uri
* @param path
*/
public void setPath(String path){
/**
* 1.音乐正在播放,重置音乐播放状态
* 2.设置播放音乐路劲
* 3.准备--播放
*/
mPath = path;
if(mMediaPlayer.isPlaying()){
mMediaPlayer.reset();
}
// 设置播放路径
try {
mMediaPlayer.setDataSource(mContext, Uri.parse(path));
} catch (IOException e) {
e.printStackTrace();
}
// 异步准备
mMediaPlayer.prepareAsync();
// 捕获异步加载完成的通知,调用onPrepared()函数
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// 将异步加载完成的通知外放出去,由外面的具体对象来决定实现什么函数,需要再定义一个内部接口
if (onMediaPlayerHelpListener != null){
onMediaPlayerHelpListener.onPrepared(mp);
}
}
});
}
/**
* 返回正在播放的音乐路径
* @return
*/
public String getPath(){
return mPath;
}
public void start(){
if (mMediaPlayer.isPlaying()){
// 正在播放不做任何处理
return;
}
// 从头开始播放。
mMediaPlayer.start();
}
public void pause(){
mMediaPlayer.pause();
}
public interface OnMediaPlayerHelpListener{
void onPrepared(MediaPlayer mp);
}
}
最后
以上就是默默早晨为你收集整理的将一个MediaPlayer控件分装思路单例模式将原有的接口对外开放。的全部内容,希望文章能够帮你解决将一个MediaPlayer控件分装思路单例模式将原有的接口对外开放。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复