录像程序

根据Google的Dev Guide 所做的录像APP,采用Intent方式调用系统相机。但该教程中有一处错误。如下所示:

public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;

/** Create a file Uri for saving an image or video */
private static Uri getOutputMediaFileUri(int type){
      return Uri.fromFile(getOutputMediaFile(type));
}

/** Create a File for saving an image or video */
private static Uri getOutputMediaFile(int type){
    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this.

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
              Environment.DIRECTORY_PICTURES), "MyCameraApp");
    // This location works best if you want the created images to be shared
    // between applications and persist after your app has been uninstalled.

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if(type == MEDIA_TYPE_VIDEO) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "VID_"+ timeStamp + ".mp4");
    } else {
        return null;
    }

    return mediaFile;
}



在教程中该方法的返回值为File而不是Uri ,不符合参数需求,所以应该将该方法改写,合并为

/** Create a File Uri for saving a video */
	private static Uri getOutputMediaFileUri() {
		// get the mobile Pictures directory
		File picDir = Environment
				.getExternalStoragePublicDirectory

(Environment.DIRECTORY_PICTURES);

		// get the current time
		String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
				.format(new Date());

		File videoFile = new File(picDir.getPath() + File.separator + 

"VIDEO_"
				+ timeStamp + ".mp4");

		return Uri.fromFile(videoFile);
	}


该Activity完整的代码如下所示

package com.ca.activity;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class CameraActivity extends Activity {

	// 初始化控件
	private Button recordBtn;
	private Button selectBtn;
	private Button uploadBtn;
	private TextView resultView;
	private EditText video_edit;

	private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 100;
	private Uri fileUri;

	// private static boolean isSDCardExit = false;
	// private static String sdpath = "";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_video);
		initView();

		// 开始摄像
		recordBtn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// create new Intent
				Intent intent = new Intent

(MediaStore.ACTION_VIDEO_CAPTURE);
				// create a file to save the video
				fileUri = getOutputMediaFileUri();
				// set the image file name
				intent.putExtra(MediaStore.EXTRA_OUTPUT, 

fileUri);
				// set the video image quality to high
				intent.putExtra

(MediaStore.EXTRA_VIDEO_QUALITY, 1);
				// start the Video Capture Intent
				startActivityForResult(intent, 100);
			}
		});
	}

	private void initView() {
		recordBtn = (Button) findViewById(R.id.recordVButton);
		selectBtn = (Button) findViewById(R.id.selectVideo);
		uploadBtn = (Button) findViewById(R.id.uploadVideo);
		resultView = (TextView) findViewById(R.id.uploadVideoResult);
		video_edit = (EditText) findViewById(R.id.video_edit);
	}

	/** Create a File Uri for saving a video */
	private static Uri getOutputMediaFileUri() {
		// get the mobile Pictures directory
		File picDir = Environment
				.getExternalStoragePublicDirectory

(Environment.DIRECTORY_PICTURES);

		// get the current time
		String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
				.format(new Date());

		File videoFile = new File(picDir.getPath() + File.separator + 

"VIDEO_"
				+ timeStamp + ".mp4");

		return Uri.fromFile(videoFile);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, 

Intent data) {
		if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
			if (resultCode == RESULT_OK) {
				// Video captured and saved to fileUri 

specified in the Intent
				Toast.makeText(this, "Video saved to:\n" + 

data.getData(),
						Toast.LENGTH_LONG).show();
			} else if (resultCode == RESULT_CANCELED) {
				// User cancelled the video capture
			} else {
				// Video capture failed, advise user
			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

}


 

实验成功,录像自动保存到SD卡的pictures目录下。后续的更改是打算让其保存到自定义目录下。添加其他按钮的功能,如选择录像和上传录像,通过onActivity函数中的请求码去处理不同的请求。

 


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值