Android学习笔记—— 十 、多媒体的基础使用 - 调用相机拍照

  1. 启动相机
				//实例化一个File对象outputImage用于存储拍下来的照片
                File outputImage = new File(getExternalCacheDir(), "output_image.jpg");
                try {

                    //因为是缓存图片,所以如果已存在就直接删除,接下来创建一个空文件
                    if (outputImage.exists()) {
                        outputImage.delete();
                    }
                    outputImage.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                //因为从Android 7.0开始直接使用本地真实路径的Uri被认为是不安全的
                //需要使用特殊的内容提供器FileProvider来将outputImage封装成一个Uri对象
                // 从而使用和内容提供器类似的机制保护数据
                if (Build.VERSION.SDK_INT >= 24) {

                    //封装outputImage,第二个参数需要和在AndroidManifest文件中配置的provider的authority属性一样
                    imageUri = FileProvider.getUriForFile(MainActivity.this, "com.example.mediatest.fileprovider", outputImage);
                } else {

                    //直接将outputImage转换为Uri对象
                    imageUri = Uri.fromFile(outputImage);
                }

                //以隐式Intent启动相机,通过putExtra方法设置将拍下来的照片存储到缓存文件中
                // 使用startActivityForResult方法返回拍照结果
                Intent intent_takePhoto = new Intent("android.media.action.IMAGE_CAPTURE");
                intent_takePhoto.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                startActivityForResult(intent_takePhoto, TAKE_PHOTO);
  1. 特殊的内容提供器FileProvider的配置
    在AndroidManifest文件中配置
	 
	 		
	    
		
            
        
    

在res目录下新建目录xml,在xml目录中新建FileProvider的路径配置文件file_paths.xml




    

  1. 处理拍照结果
			if (resultCode == RESULT_OK) {

                    //将拍下来的照片解析成Bitmap对象并显示
                    try {
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                        img_showPhoto.setImageBitmap(bitmap);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }

你可能感兴趣的:(Android学习笔记)