概述
1、清单文件AndroidManifest.xml需要添加SD卡的读取和写入权限
2、MainActivity.java
package com.t20.camera;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.ImageView;
import android.widget.MediaController;
import android.widget.VideoView;
public class MainActivity extends Activity {
private static final int TAKE_PHOTO = 1;
private static final int TAKE_VIDEO = 2;
private String videoName;//视频名称
private ImageView iv;
private VideoView vv;
private Uri photoUri;
private Uri videoUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView) findViewById(R.id.imageView1);
vv=(VideoView) findViewById(R.id.videoView1);
//显示ImageView控件
iv.setVisibility(View.VISIBLE);
//隐藏VideoView控件
vv.setVisibility(View.INVISIBLE);
/*
VISIBLE (常量值:0) 可见的
INVISIBLE(常量值:4) 不可见的,但还占着原来的空间
GONE (常量值:8) 隐藏,不占用原来的布局空间
*/
}
/**
* 使用照像机进行拍照
* @param v
*/
public void photo(View v){
//显示ImageView控件
iv.setVisibility(View.VISIBLE);
//隐藏VideoView控件
vv.setVisibility(View.INVISIBLE);
Date date=Calendar.getInstance().getTime();
SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMddHHmmss");
String str=sdf.format(date);
File imgFile=new File(getExternalCacheDir(),str+".jpg");
//getExternalCacheDir()表示SD卡中的目录
//getFilesDir()表示内存中的目录
try {
//存在同名文件就删除,再创建
if(imgFile.exists()){
imgFile.delete();
}
imgFile.createNewFile();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//创建Uri( 设置照片存储路径)
photoUri=Uri.fromFile(imgFile);
//准备意图
Intent intent=new Intent();
intent.setAction("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, TAKE_PHOTO);//往返
}
/**
* 使用照像机进行录像
* @param v
*/
public void video(View v){
//显示VideoView控件
vv.setVisibility(View.VISIBLE);
//隐藏ImageView控件
iv.setVisibility(View.INVISIBLE);
Date date=Calendar.getInstance().getTime();
SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMddHHmmss");
String str=sdf.format(date);
videoName=str+".3gp";
File videoFile=new File(getExternalCacheDir(),videoName);
//getExternalCacheDir()表示SD卡中的目录
//getFilesDir()表示内存中的目录
try {
//存在同名文件就删除,再创建
if(videoFile.exists()){
videoFile.delete();
}
videoFile.createNewFile();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//创建Uri( 设置录像存储路径)
videoUri=Uri.fromFile(videoFile);
//准备意图
Intent intent=new Intent();
intent.setAction("android.media.action.VIDEO_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
startActivityForResult(intent, TAKE_VIDEO);//往返
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (requestCode) {
case TAKE_PHOTO:
if(resultCode==RESULT_OK){
try {
//将拍照的照片显示出来
Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(photoUri));
iv.setImageBitmap(bitmap);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
break;
case TAKE_VIDEO:
if(resultCode==RESULT_OK){
//设置视频路径
vv.setVideoPath(getExternalCacheDir()+"/"+videoName);
//开始播放(启动)
vv.start();
//为播放器添加控制面板(播放、暂停、进度控制)
vv.setMediaController(new MediaController(MainActivity.this));
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
最后
以上就是慈祥果汁为你收集整理的Android使用多媒体(Media)拍照和录像的全部内容,希望文章能够帮你解决Android使用多媒体(Media)拍照和录像所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复