调用android系统相机拍照并保存图片
android调用系统相机拍照并保存图片
调用系统相机:
//在某个事件中添加如下代码即可,不是说单击事件都不会写啊
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE),1);
解释:其中参数MediaStore.ACTION_IMAGE_CAPTURE是调用系统相机用的,而后面的1则是请求的Activity的标志,用来处理返回结果的
可以理解为:给系统相机的Activity添加一个请求标志,在用onActivityResult处理返回结果时,有一个与这个标志相对应的处理方案
保存图片:
// 使用startActivityForResult返回结果时调用的方法 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 如果返回值是正常的话 if (resultCode == Activity.RESULT_OK) { // 验证请求码是否一至,也就是startActivityForResult的第二个参数 switch (requestCode) { case 1: saveCameraImage(data); break; default: break; } } } /** 保存相机的图片 **/ private void saveCameraImage(Intent data) { // 检查sd card是否存在 if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Log.i(TAG, "sd card is not avaiable/writeable right now."); return; } // 为图片命名啊 String name = new DateFormat().format("yyyymmdd", Calendar.getInstance(Locale.CHINA)) + ".jpg"; Bitmap bmp = (Bitmap) data.getExtras().get("data");// 解析返回的图片成bitmap // 保存文件 FileOutputStream fos = null; File file = new File("/mnt/sdcard/test/"); file.mkdirs();// 创建文件夹 String fileName = "/mnt/sdcard/test/" + name;// 保存路径 try {// 写入SD card fos = new FileOutputStream(fileName); bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { fos.flush(); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }// 显示图片 ((ImageView) findViewById(R.id.show_image)).setImageBitmap(bmp); }
最重要的是:不要忘记添加权限哦
<uses-permission android:name="android.permission.CAMERA" /><!-- 相机 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 写入sdcard -->
谁走进你的生命,是由命运决定,谁停留在你的生命中,却由你自己决定