上一篇中,我们实现了在保存文字后,将保存的数据显示到主页的ListView之中,说明保存文本的功能实现了。现在我们开始实现保存 图片和视频的功能;由于保存图片和和视频与保存文本不一样,他们不能存入到数据库中,所以我们只要将图片或视频的绝对路径保存到数据库中即可,显示的时候通过路径找到图片即可;

一、在第一篇中,我们进入记录图片的界面是使用,

case R.id.img:
	intent.putExtra("flag", "img");
	startActivity(intent);
	break;
case R.id.img:
	intent.putExtra("flag", "img");
	startActivity(intent);
	break;

则进入addcontent类中,通过接受intent传过来的flag实现记录图片绝对路径的功能

if(val.equals("img")){
		c_img.setVisibility(View.VISIBLE); //设置控件可见
		c_video.setVisibility(View.GONE);
		//使用照相机拍照
		Intent i_img=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		//通过Environment获得SD卡中的生成图片的绝对路径
		phoneFile=new File(Environment.getExternalStorageDirectory()
				.getAbsoluteFile()+"/"+getTime()+".jpg");
		//将生成的图片放置到指定的路径之下;
		i_img.putExtra(MediaStore.EXTRA_OUTPUT, 
				Uri.fromFile(phoneFile));
		startActivityForResult(i_img, 1);
	}
if(val.equals("img")){
		c_img.setVisibility(View.VISIBLE); //设置控件可见
		c_video.setVisibility(View.GONE);
		//使用照相机拍照
		Intent i_img=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		//通过Environment获得SD卡中的生成图片的绝对路径
		phoneFile=new File(Environment.getExternalStorageDirectory()
				.getAbsoluteFile()+"/"+getTime()+".jpg");
		//将生成的图片放置到指定的路径之下;
		i_img.putExtra(MediaStore.EXTRA_OUTPUT, 
				Uri.fromFile(phoneFile));
		startActivityForResult(i_img, 1);
	}

由于在只记录文本的时候,ImageView和VideoView是隐藏的,当记录图片的时候,就使ImageView设置为显示;VideoView还设置为隐藏;

这里有一个新的知识点;就是通过Intent去实现一些调用系统硬件的功能;

Intent i_img=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent i_img=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

MediaStore这个类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建

Environment 常用方法: 
方法:getDataDirectory() 
解释:返回 File ,获取 Android 数据目录。

方法:getDownloadCacheDirectory() 
解释:返回 File ,获取 Android 下载/缓存内容目录。

方法:getExternalStorageDirectory() 
解释:返回 File ,获取外部存储目录即 SDCard

方法:getExternalStoragePublicDirectory(String type) 
解释:返回 File ,取一个高端的公用的外部存储器目录来摆放某些类型的文件

方法:getExternalStorageState() 
解释:返回 File ,获取外部存储设备的当前状态

方法:getRootDirectory() 
解释:返回 File ,获取 Android 的根目录
Environment 常用方法: 
方法:getDataDirectory() 
解释:返回 File ,获取 Android 数据目录。

方法:getDownloadCacheDirectory() 
解释:返回 File ,获取 Android 下载/缓存内容目录。

方法:getExternalStorageDirectory() 
解释:返回 File ,获取外部存储目录即 SDCard

方法:getExternalStoragePublicDirectory(String type) 
解释:返回 File ,取一个高端的公用的外部存储器目录来摆放某些类型的文件

方法:getExternalStorageState() 
解释:返回 File ,获取外部存储设备的当前状态

方法:getRootDirectory() 
解释:返回 File ,获取 Android 的根目录

startActivityForResult(i_img, 1);  使用这个方法打开新的activity后,当新的activity关闭后,会返回一个结果值;

我们通过这个方法,得到新的activity关闭后返回的结果值;

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		//返回1的时候,是将图片显示到ImageView中;
		if(requestCode==1){
			Bitmap bitmap=BitmapFactory
					.decodeFile(phoneFile.getAbsolutePath());
			c_img.setImageBitmap(bitmap);
		}
		//返回2的时候是将新拍的视频的放入到VideoView中,并且开始播放;
		if(requestCode==2){
			c_video.setVideoURI(Uri.fromFile(vedioFile));
			c_video.start();
			
		}
			
	}
@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		//返回1的时候,是将图片显示到ImageView中;
		if(requestCode==1){
			Bitmap bitmap=BitmapFactory
					.decodeFile(phoneFile.getAbsolutePath());
			c_img.setImageBitmap(bitmap);
		}
		//返回2的时候是将新拍的视频的放入到VideoView中,并且开始播放;
		if(requestCode==2){
			c_video.setVideoURI(Uri.fromFile(vedioFile));
			c_video.start();
			
		}
			
	}

这样拍摄的照片就显示到我们的窗口中了;

接下来是保存视频的部分,跟保存图片的情况差不多;

if(val.equals("video")){
		c_img.setVisibility(View.GONE);
		c_video.setVisibility(View.VISIBLE);
	
		Intent i_vedio=new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
		vedioFile=new File(Environment.getExternalStorageDirectory()
				.getAbsoluteFile()+"/"+getTime()+".mp4");
		i_vedio.putExtra(MediaStore.EXTRA_OUTPUT, 
				Uri.fromFile(vedioFile));
		startActivityForResult(i_vedio, 2);
	}
if(val.equals("video")){
		c_img.setVisibility(View.GONE);
		c_video.setVisibility(View.VISIBLE);
	
		Intent i_vedio=new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
		vedioFile=new File(Environment.getExternalStorageDirectory()
				.getAbsoluteFile()+"/"+getTime()+".mp4");
		i_vedio.putExtra(MediaStore.EXTRA_OUTPUT, 
				Uri.fromFile(vedioFile));
		startActivityForResult(i_vedio, 2);
	}

同样只保存视频文件的路径;拍摄完毕后界面显示放拍的视频;同时都可以在文本编辑框继续记录文字;

这样在点击保存按钮下,将信息保存到数据库中。这样就完成了图片或视频的保存;