Android技巧: 如何读取 apk 中的 Video

把 video 放在  apk 包中, 可以方便程序的安装,有两种读取的方法

从包中拆解文件再读取

video 文件放在 Prj_Dir/assets 下 ( Prj_Dir/assets/myvideo.mp4)

			
public class VideoActivity extends Activity {

    public final String TAG = "VideoActivity";
    private final String VIDEO = "myvideo.mp4";

    public boolean storeVideoFile() {
        try {
            InputStream is = getResources().getAssets().open(VIDEO);
			
            //注意,这里用 MODE_WORLD_READABLE 是因为播放Video的是MediaPlayer进程,不是本进程
            //为了让, MediaPlayer进程能读取此文件,所以设置为: MODE_WORLD_READABLE
            FileOutputStream os = openFileOutput(VIDEO, MODE_WORLD_READABLE);
			
            byte[] buffer = new byte[1024];
            while (is.read(buffer) > -1) {
                os.write(buffer);
            }
            is.close();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!storeVideoFile())
            return;

        VideoView videoView = new VideoView(this);
        setContentView(videoView);
        // videoView.setMediaController(new MediaController(this));
        videoView.setVideoPath(getFilesDir().getAbsolutePath() + "/" + VIDEO);

        videoView.setOnPreparedListener(new OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setLooping(true);
            }
        });

        videoView.start();
    }

}			

使用URI

这种方法,更加简洁, Video 文件放 Prj_dir/raw/ 下面

public class VideoActivity extends Activity {

    public final String TAG = "VideoActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Uri uri = Uri.parse("android.resource://" + getPackageName() + "/"
                + R.raw.myvideo);
        VideoView videoView = new VideoView(this);
        setContentView(videoView);
        videoView.setVideoURI(uri);
        Log.e(TAG, " uri is:" + uri);

        videoView.setOnPreparedListener(new OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setLooping(true);
            }
        });

        videoView.start();
    }

}



你可能感兴趣的:(android)