我这几天用surfaceView来做视频播放的时候,file文件读取是没有问题的,但是在之后setDataSource()和.prepare()这两个方法的其中一个(抱歉,我实在不能确定问题到底出在这两个中的哪一个)抛出了IO异常。具体代码如下,我都做注释
package com.example.zyc.surfaceview;
import android.media.MediaPlayer;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Surface;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private File file;
private Button playButton;
private Button pauseButton;
private Button stopButton;
private boolean isPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实现各种控件
mediaPlayer = new MediaPlayer();
surfaceView = (SurfaceView)findViewById(R.id.surfaceView1);
playButton = (Button)findViewById(R.id.play);
pauseButton = (Button)findViewById(R.id.pause);
stopButton = (Button)findViewById(R.id.stop);
//初始化一些变量
isPlay = false;
file = new File(Environment.getExternalStorageDirectory().getPath()+"/ss.mp4");
pauseButton.setEnabled(false);
//用来检查file是否读取正确
if(file.exists()){
Toast.makeText(MainActivity.this,"文件已经被获取 文件长度为"+file.length(),Toast.LENGTH_LONG).show();
}else{
Toast.makeText(MainActivity.this,"文件没有获得",Toast.LENGTH_LONG).show();
}
//实现三个按钮的方法
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.reset(); //重置MediaPlay对象
try {
mediaPlayer.setDataSource(file.getAbsolutePath()); //读取视频文件地址
mediaPlayer.prepare(); //预加载视频
mediaPlayer.setDisplay(surfaceView.getHolder()); //将视频画面输出到surface上
mediaPlayer.start(); //开始播放
pauseButton.setText("暂停"); //pause此时为暂停
pauseButton.setEnabled(true); //pause按钮此时可用
isPlay = true;
}catch (IOException e){
Toast.makeText(MainActivity.this,"发生错误",Toast.LENGTH_LONG).show();
}
}
});
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isPlay == true) {
pauseButton.setText("继续");
mediaPlayer.pause();
isPlay = false;
} else {
mediaPlayer.start();
pauseButton.setText("暂停");
isPlay = true;
}
}
});
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isPlay==true){
mediaPlayer.stop();
Toast.makeText(MainActivity.this,"已停止",Toast.LENGTH_LONG).show();
pauseButton.setEnabled(false);
}
}
});
}
}
用的android studio,三星真机模拟
运行后的截图,(我还没点播放)
可以看到,文件长度。说明file的没有问题的
但是点击播放以后
实在是不明白这怎么能错,其他人貌似也没有我这毛病啊