之前不懂得怎么获取系统的照相与摄像功能,后来通过查询网上的代码并编写得出,现在来整理下一些代码。

照相与摄像功能都可以通过Intent的setAction方法来调用分别是MediaStore.ACTION_IMAGE_CAPTURE与MediaStore.ACTION_VIDEO_CAPTURE。

在xml中放置三个按钮,一个拍照一个摄像一个保存,一个ImageView,先说说拍照怎么调用。在OnClick()中写如下代码:

intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);intent.addCategory("android.intent.category.DEFAULT");startActivityForResult(intent,0);

然后我在onActivityResult()中进行图片p_w_picpathview的显示即预览或者做其他操作也行:

if(resultCode==RESULT_OK){if(requestCode==0){Bundleextras=data.getExtras();bitmap=(Bitmap)extras.get("data");p_w_picpath.setImageBitmap(bitmap);}}else{Toast.makeText(this,"获取资源失败",Toast.LENGTH_SHORT).show()return;}

最后再进行保存,保存之前的话要对照片先进行命名与保存到自己指定的文件夹下。

根据时间来命名可以保证不重复命名:

privatestaticStringcreateFileName(){SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd-HH:mm:ss");Datedate=newDate(System.currentTimeMillis());StringfileName=dateFormat.format(date)+".jpg";returnfileName;}

保存到指定文件夹下:

//path="/sdcard/1130photos"publicstaticvoidsavePhotoToSdcard(Stringpath,StringphotoName,Bitmapbitmap){if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){Filefile=newFile(path);if(!file.exists()){file.mkdirs();}FilephotoFile=newFile(file,photoName);FileOutputStreamfos=null;try{fos=newFileOutputStream(photoFile);if(bitmap!=null){compress=bitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);if(compress){fos.flush();fos.close();}}}catch(FileNotFoundExceptione){photoFile.delete();e.printStackTrace();}catch(IOExceptione){photoFile.delete();e.printStackTrace();}finally{if(fos!=null){try{fos.close();}catch(IOExceptione){e.printStackTrace();}}}}}

最后保存:

if(bitmap==null){Toast.makeText(this,"请先拍照",Toast.LENGTH_SHORT).show();}else{savePhotoToSdcard(path,MainActivity.createFileName(),bitmap);Toast.makeText(this,"保存成功",Toast.LENGTH_SHORT).show();p_w_picpath.setImageResource(R.drawable.ic_launcher);bitmap=null;}

摄像功能也是一样的步骤:

文件名:

privatestaticStringcreateVideoFileName(){SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd-HH:mm:ss");Datedate=newDate(System.currentTimeMillis());StringfileName=dateFormat.format(date)+".3gp";returnfileName;}

摄像后直接保存

//path_video="/sdcard/1130video"intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);Filevideo_file=newFile(path_video,MainActivity.createVideoFileName());if(video_file.exists()){video_file.delete();}Urivideo_uri=Uri.fromFile(video_file);intent.putExtra(MediaStore.EXTRA_OUTPUT,video_uri);startActivity(intent);

也可以不做操作直接保存到系统相机的目录下。