打开相机拍摄照片onActivityResult不返回RESULT_OK

使用手机自带相机拍摄照片并存储的时候,在onActivityResult回调方法中,返回的resultCode不为RESULT_OK。
在排除了调用系统相机方法的错误后,返回的resultCode还是不为RESULT_OK。
最后发现照片保存的目录如果没有创建的话,会导致这个错误。
这是因为我习惯将文件目录的创建放在application中,但是在6.0以上系统,是动态申请权限的,application在这个时候
还没有动态获取到权限,因此目录没有创建成功。
找到原因后就好解决了,在动态申请到存储权限之后,再去创建文件目录。这个时候相机拍摄照片在onActivityResult回调方法中,返回的resultCode就正确了。
附上打开系统相机拍摄照片的代码:

    /**
     * 打开相机拍摄并存储照片
     * 此时必须保证照片存储目录已经创建成功
     */
    private void openCamera() {
    	//dirName--文件目录路径名称,fileName存储的照片文件名
        File file = new File(dirName, fileName);
        Uri  imageUri = getFileUri(file, mContext);
        takePicture(this, imageUri, REQUEST_OPEN_CAMERA);
    }
        
    /**
     * 生成文件的Uri
     * @param file
     * @param context
     * @return
     */
	private  Uri getFileUri(File file, Context context) {
        Uri uri = Uri.fromFile(file);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            //通过FileProvider创建一个content类型的Uri
            uri = FileProvider.getUriForFile(context, context.getPackageName(), file);
        }
        return uri;
    }
    
    /**
     * 调用系统相机拍摄
     *
     * @param activity
     *         当前activity
     * @param imageUri
     *         拍照后照片存储路径
     * @param requestCode
     *         调用系统相机请求码
     */
   	private void takePicture(Activity activity, Uri imageUri, int requestCode) {
        //调用系统相机
        Intent intentCamera = new Intent();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        	 //添加这一句表示对目标应用临时授权该Uri所代表的文件
            intentCamera.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }
        intentCamera.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        //将拍照结果保存至photo_file的Uri中,不保留在相册中
        intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        activity.startActivityForResult(intentCamera, requestCode);
    }

你可能感兴趣的:(andorid)