android 下的一段视屏播放的逻辑
来源:互联网 发布:apple数据恢复 编辑:程序博客网 时间:2024/05/20 00:16
android 下的一段视屏播放的逻辑只是Activity的一部分逻辑源码
DemoActivity:
public class DemoActivity extends Activity implements OnClickListener {
EditText et_path;
Button bt_start;
Button bt_pause;
Button bt_restart;
Button bt_stop;
SurfaceView sv;
SurfaceHolder holder;
MediaPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et_path = (EditText) this.findViewById(R.id.et_path);
bt_start = (Button) this.findViewById(R.id.bt_start);
bt_pause = (Button) this.findViewById(R.id.bt_pause);
bt_restart = (Button) this.findViewById(R.id.bt_restart);
bt_stop = (Button) this.findViewById(R.id.bt_stop);
sv = (SurfaceView) this.findViewById(R.id.sv);
bt_start.setOnClickListener(this);
bt_pause.setOnClickListener(this);
bt_restart.setOnClickListener(this);
bt_stop.setOnClickListener(this);
holder = sv.getHolder();
// 设置缓冲区的内容向holder推送的方式
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.addCallback(new MyHolderCallback());
}
/**
* surface的声明周期
* @author Administrator
*
*/
private class MyHolderCallback implements SurfaceHolder.Callback{
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
}
@Override
public void onClick(View v) {
String path = et_path.getText().toString().trim();
switch(v.getId()){
case R.id.bt_start:
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDisplay(holder);
if("".equals(path)){//如果输入的链接为空的话
Toast.makeText(this, "文件为空,请输入文件的链接", Toast.LENGTH_SHORT).show();
return;
}
try {
player.setDataSource(path);
player.prepare();
} catch (Exception e) {
Toast.makeText(this, "文件访问出错", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
player.setOnCompletionListener(new OnCompletionListener(){//当媒体播放是否完成的监听器
@Override
public void onCompletion(MediaPlayer mp) {
Toast.makeText(DemoActivity.this, "播放完成", 0).show();
player.release();//播放完成的时候,要释放资源
player = null;
bt_start.setEnabled(true);
}
});
player.setOnErrorListener(new OnErrorListener(){
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Toast.makeText(DemoActivity.this, "播放完成出现错误", 0).show();
player.release();//出现错误的时候要释放资源
player = null;
bt_start.setEnabled(true);
return false;
}
});
player.start();
bt_start.setEnabled(false);
break;
case R.id.bt_pause:
if(player != null && player.isPlaying()){//如果媒体正在播放的话
player.pause();
bt_pause.setText(">>");
return;
}
if(player != null && ">>".equals(bt_pause.getText())){
player.start();
bt_pause.setText("||");
return;
}
break;
case R.id.bt_restart:
if(player != null && player.isPlaying()){//媒体正在播放的话
player.seekTo(0);
}else{
Toast.makeText(DemoActivity.this,"需要重新博凡", Toast.LENGTH_SHORT).show();
}
break;
case R.id.bt_stop:
if(player != null && player.isPlaying()){//媒体正在播放的话
player.stop();//如果是停止播放一段媒体的话,肯定是要先停止,然后再释放资源
player.release();
player = null;
bt_start.setEnabled(true);//设置开始按钮为可点击
} else{
player.release();
player = null;
bt_start.setEnabled(true);//设置开始按钮为可点击
bt_start.setClickable(true);
}
break;
}
}
}
- android 下的一段视屏播放的逻辑
- 一段古怪的逻辑
- 视屏播放快进快退的逻辑处理
- 一段小巧的播放器代码
- 一段Unicode下的Log
- 编写一段新的逻辑要满足的条件
- Spring Core中一段比较优秀的逻辑
- 一段datepickerdialog与自定义Timepickerdialog限定时间范围的逻辑
- 关于Android下的MP3播放器
- 一段在网页上播放mp3语音的代码
- 我的第一个DirectShow程序,播放一段视频
- 一段LINUX下常用的多线程程序代码
- linux下测试一段代码的执行时间
- chrome 下一段代码的理解
- 搜集了一段播放用java播放.wav的代码,可以直接使用
- android启动其他应用的一段代码
- android 启动其他应用的一段代码
- android启动其他应用的一段代码
- Android 判断网络是否连接
- Android开发中onClick事件的几种实现,分析,对比
- 栈的应用:解析算术表达式
- 判断日期结束日期不能小于开始日期
- Zend Framework 2 时区设置警告问题的解决
- android 下的一段视屏播放的逻辑
- [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
- system函数的用法
- 创建Applet源文件
- 使用Oracle SQLDeveloper 连接DB2
- Struts 2详细工作流程
- 递归和迭代
- 入行必读:互联网行业薪酬等级
- phpMyAdmin 3.5.8 在 Safari 中白屏问题的解决