編輯:關於Android編程
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開發的重要方面之Makefile分析 隨著移動互聯網的發展,移動開發也越來越吃香了,目前最火的莫過於android,android是什麼就不用說了,andr
Servlet監聽器簡介Servlet監聽器的作用是監聽Web容器的有效事件,由容器管理。利用Listener接口監聽在容器中的某個執行程序,並更具應用程序的需求做出適當
Java是垃圾回收語言的一種,其優點是開發者無需特意管理內存分配,降低了應用由於局部故障(segmentation fault)導致崩潰,同時防止未釋放的內存把堆棧(he
本文屬於個人平時項目開發過程遇到的一些問題,記錄下來並總結解決方案,希望能幫到大家解決問題,有些問題的解決方案是在StackoverFlow上找到的,建議大家遇到問題多去