Android(安卓)播放MP4文件
16lz
2022-06-14
首先,要在AndroidManifest.xml文件中添加相应的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第二步,布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <SurfaceView android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="360dp" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" > <ImageButton android:id="@+id/btnplay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/play" /> <ImageButton android:id="@+id/btnpause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/pause" /> <ImageButton android:id="@+id/btnstop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/stop" /> LinearLayout> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" />LinearLayout >
第三步,主代码部分:
package com.example.teltplay;import java.io.File;import java.io.IOException;import android.app.Activity;import android.content.res.AssetFileDescriptor;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.media.MediaPlayer.OnErrorListener;import android.media.MediaPlayer.OnPreparedListener;import android.media.MediaPlayer.OnSeekCompleteListener;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageButton;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener{ private ImageButton btnplay, btnstop, btnpause; private SurfaceView surfaceView; private MediaPlayer mediaPlayer; private int position; TextView textView1; private String filename = Environment.getExternalStorageDirectory().getPath()+"/TestLog/test.mp4";; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnplay=(ImageButton)this.findViewById(R.id.btnplay); btnstop=(ImageButton)this.findViewById(R.id.btnstop); btnpause=(ImageButton)this.findViewById(R.id.btnpause); textView1=(TextView)this.findViewById(R.id.textView1); btnstop.setOnClickListener(this); btnplay.setOnClickListener(this); btnpause.setOnClickListener(this); mediaPlayer=new MediaPlayer(); surfaceView=(SurfaceView) this.findViewById(R.id.surfaceView); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { textView1.setText("播放完毕!..."); } }); mediaPlayer.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { textView1.setText("播放出错!..."); return false; } }); mediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { textView1.setText("准备就绪!..."); } }); mediaPlayer.setOnSeekCompleteListener(new OnSeekCompleteListener() { @Override public void onSeekComplete(MediaPlayer mp) { textView1.setText("进度拖放完毕!..."); } }); //设置SurfaceView自己不管理的缓冲区 surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().addCallback(new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override public void surfaceCreated(SurfaceHolder holder) { if (position>0) { try { //开始播放 play(); //并直接从指定位置开始播放 mediaPlayer.seekTo(position); position=0; } catch (Exception e) { // TODO: handle exception } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnplay: play(); break; case R.id.btnpause: if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); }else{ mediaPlayer.start(); } break; case R.id.btnstop: if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); } break; default: break; } } @Override protected void onPause() { //先判断是否正在播放 if (mediaPlayer.isPlaying()) { //如果正在播放我们就先保存这个播放位置 position=mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); } super.onPause(); } private void play() { try { mediaPlayer.reset(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置需要播放的视频 mediaPlayer.setDataSource(filename); //把视频画面输出到SurfaceView mediaPlayer.setDisplay(surfaceView.getHolder()); mediaPlayer.prepare(); //播放 mediaPlayer.start(); } catch (Exception e) { // TODO: handle exception } } }
更多相关文章
- Android(安卓)使用MediaPlayer播放视频切换后台暂停再恢复互前台
- Android手机游戏摇杆
- [置顶] Android动态添加控件约束位置
- android 录音和播放
- Android(安卓)LocationManager 使用
- 申请 Android(安卓)MapView 的apiKey流程
- android播放音频文件(MediaPlayer)和录音(MediaRecorder)--播放
- 如何申请Android(安卓)MapView的apiKey
- Android播放在线音乐文件