上一篇中,我们实现了在保存文字后,将保存的数据显示到主页的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);
}
同样只保存视频文件的路径;拍摄完毕后界面显示放拍的视频;同时都可以在文本编辑框继续记录文字;
这样在点击保存按钮下,将信息保存到数据库中。这样就完成了图片或视频的保存;