接口实例
来源:互联网 发布:vb与matlab混合编程 编辑:程序博客网 时间:2024/05/21 04:17
作为一个菜鸟,以前很少利用接口来监听一些操作的完成,最近写了一个应用,在PopupWindow中展示了录音文件,由于播放机制单独写出来了,然后在播放录音的时候关闭PopupWindow,然后再点开PopupWindow,PopupWindow中的listView中item播放的状态不能改变.所有只能在播放机制中写个接口等音乐播放完了通知适配器改变.
import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;public class AudioPlayer implements OnCompletionListener {private static AudioPlayer instance;public static AudioPlayer getInstance() {if (instance == null || instance.mMediaPlayer == null) {instance = new AudioPlayer();}return instance;}private AudioPlayer() {mMediaPlayer = new MediaPlayer();mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mMediaPlayer.setLooping(false);mMediaPlayer.setOnCompletionListener(this);}private MediaPlayer mMediaPlayer;private boolean isPlaying = false;//播放完成接口private OnCompletionListener listener;private String source;@Overridepublic void onCompletion(MediaPlayer mp) {isPlaying = false;//播放完触发执行接口if (listener != null) {listener.onCompletion(mp);}}public void play(String source) {if (source == null) {return;}if (source.equals(this.source)) {if (isPlaying) {pause();} else {play();}return;}try {mMediaPlayer.reset();mMediaPlayer.setDataSource(source);mMediaPlayer.prepare();this.source = source;play();} catch (Exception e) {e.printStackTrace();}}private void play() {mMediaPlayer.start();isPlaying = true;}public void stop() {if (isPlaying) {mMediaPlayer.stop();mMediaPlayer.reset();mMediaPlayer = null;}isPlaying = false;}public void pause() {mMediaPlayer.pause();isPlaying = false;}public boolean isPlaying() {return isPlaying;}public void release() {isPlaying = false;mMediaPlayer.release();mMediaPlayer = null;}//实现接口方法public void setOnCompletionListener(OnCompletionListener listener) {this.listener = listener;}}
调用如下:
import android.content.Context;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.view.LayoutInflater;import android.view.View;import android.widget.LinearLayout;import android.widget.ListView;import com.example.piano_app.adapter.AudioAdapter;import com.example.piano_app.model.AudioPlayer;public class AudioView extends LinearLayout {private LayoutInflater inflater;private Context context;private View View;private ListView listView;private AudioAdapter adapter;private PianoView pianoView;public AudioView(Context context, PianoView pianoView) {super(context);this.context = context;this.pianoView = pianoView;initView();addView(View);}private void initView() {inflater = LayoutInflater.from(context);View = inflater.inflate(R.layout.fragment_audio_layout, null);listView = (ListView) View.findViewById(R.id.audio_list);adapter = new AudioAdapter(context,pianoView);listView.setAdapter(adapter);}@Overrideprotected void onAttachedToWindow() {// TODO Auto-generated method stubsuper.onAttachedToWindow();//实现接口通知适配器改变AudioPlayer.getInstance().setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {adapter.notifyDataSetChanged();}});}@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();//实现接口清空AudioPlayer.getInstance().setOnCompletionListener(null);}}
上面MediaPlayer本身就有个播放完成接口,所已就不要我们自己写了,下面自己写的接口:
public class SoundModel {private static SoundModel instance;public static SoundModel getInstance() {if (instance == null) {instance = new SoundModel();}return instance;}private SoundModel() {}private final List<RecordEvent> sounds = new ArrayList<RecordEvent>();//播放录音public void playSoundQueue(List<RecordEvent> sounds) {if (sounds == null || sounds.isEmpty()) {return;}isQueuePlaying = true;handler.removeMessages(0);this.sounds.clear();this.sounds.addAll(sounds);this.sounds.add(getEndEvent());handler.sendEmptyMessageDelayed(0, sounds.get(0).getIntervalTime());}private RecordEvent getEndEvent() {RecordEvent e = new RecordEvent();e.setIntervalTime(100);e.setPosition(-1);return e;}public void stopPlaySoundQueue() {isQueuePlaying = false;handler.removeMessages(0);//触发接口if (mlistener != null) {mlistener.getCompletion();}sounds.clear();}private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {Log.e("SoundModel", "播放队列中:" + sounds.size());if (sounds.size() == 0) {return;}RecordEvent event = sounds.remove(0);if (!sounds.isEmpty()) {handler.sendEmptyMessageDelayed(0, sounds.get(0).getIntervalTime());} else {Log.i("jjf", "停止");isQueuePlaying = false;//触发播放完成接口if (mlistener != null) {mlistener.getCompletion();}}play(event.getType(), event.getPosition());//触发开始播放接口if (mCallBack != null) {mCallBack.callback(event.getType(), event.getPosition());}};};//开始播放接口初始化PlayQueueCallBack mCallBack;//播放完成接口初始化CompletionListener mlistener;//开始播放接口的实现方法public void setPlayQueueCallBack(PlayQueueCallBack mCallBack) {this.mCallBack = mCallBack;}//播放完成接口的实现方法public void setCompletionListener(CompletionListener mlistener) {this.mlistener = mlistener;}public void release() {mSoundPool.release();mSoundPool = null;}//开始播放接口public interface PlayQueueCallBack {void callback(int type, int position);}//播放完成接口public interface CompletionListener {void getCompletion();}}
0 0
- 接口实例
- 接口实例
- 接口实例
- 接口实例
- 接口的实例之一
- 接口实例化
- C#接口实例
- 抽象类 接口 实例
- java接口经典实例
- 接口的实例研究
- 接口能否实例化?
- C#接口实例详解
- 面向接口编程实例
- 接口不同实例
- 接口实例应用
- C#接口-经典实例
- 接口编程 -实例
- 接口可以实例化
- SQL RIGHT JOIN 关键字 高级编程
- 超实用的jQuery分页插件
- biji1016
- Node.js代码总结
- Windows7部署Android开发环境傻瓜式教程(Eclipse+ADT) (转)
- 接口实例
- 一种更清晰的Android架构
- 苹果开发者帐号(Company)申请流程(一)
- JSON和JSONP的区别及跨域访问
- Php与python简单比较
- 2D Delaunay Refinement (2D Delaunay 细化)
- 20150721输入大小写,输出小大写
- JAVA设计模式(7) —<结构型>装饰模式(Decorator)
- Java中的static关键字解析