Android调用系统相机分三步走:
首先是要设置调用相机的权限。
其次是给按钮加打开相机的事件。
最后是拍照后进行图片的保存。
第一步,添加权限:
1 <!-- 调用系统相机 --> 2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 3 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
第二步,添加打开相机的事件:
1 public void clickHandler(View source) 2 { 3 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 4 startActivityForResult(intent, 1); 5 }
第三步,拍照后进行照片的保存
1 //调用相机拍照后保存图片 2 @Override 3 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 4 // TODO Auto-generated method stub 5 super.onActivityResult(requestCode, resultCode, data); 6 if (resultCode == Activity.RESULT_OK) { 7 String sdStatus = Environment.getExternalStorageState(); 8 if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 9 Log.i("TestFile", 10 "SD card is not avaiable/writeable right now."); 11 return; 12 } 13 String name = new DateFormat().format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA)) + ".jpg"; 14 Toast.makeText(this, name, Toast.LENGTH_LONG).show(); 15 Bundle bundle = data.getExtras(); 16 Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式 17 18 FileOutputStream b = null; 19 //???????????????????????????????为什么不能直接保存在系统相册位置呢???????????? 20 File file = new File("/sdcard/myImage/"); 21 file.mkdirs();// 创建文件夹 22 String fileName = "/sdcard/myImage/"+name; 23 24 try { 25 b = new FileOutputStream(fileName); 26 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件 27 } catch (FileNotFoundException e) { 28 e.printStackTrace(); 29 } finally { 30 try { 31 b.flush(); 32 b.close(); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } 36 } 37 ((ImageView) findViewById(R.id.imageView1)).setImageBitmap(bitmap);// 将图片显示在ImageView里 38 } 39 }
需要在XML界面加一个Button,ImageView