zoukankan      html  css  js  c++  java
  • Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    正常情况下调用系统相机拍照: 
    如果拍照后点击的是“确定”图标,返回的resultCode = -1(Activity.RESULT_OK); 
    如果点击的是底部的“返回”键,返回的resultCode = 0(Activity.RESULT_CANCELED)。

    简单的调用系统相机的写法:

    //调用系统拍照
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    String photofileName = "IMG_" + new Date() + ".jpg";
    String imgUrl = Environment.getExternalStorageDirectory() + File.separator + "tempWhy"+ File.separator + photofileName;//必须使用已经存在的文件夹tempWhy
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(imgUrl)));
    //启动拍照的窗体。并注册 回调处理
    startActivityForResult(intent, 1111);

    返回时的处理

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {
            switch (requestCode) {
                //拍照功能
                case 1111:
                    break;
            }
        }
    }

    那么,今天碰到的在Android6.0机型上出现的调用系统相机拍照返回的resultCode的值始终等于0的问题,主要是由于以下两方面原因导致到:

    一、没有实现运行时权限的处理 
    当AndroidManifest.xml文件中的Android:targetSdkVersion值大于等于23的时候,此时必须要实现运行时权限的处理,因为向SD卡读写文件的权限——android.permission.WRITE_SETTINGS属于运行时权限。 
    解决方案: 
    方案一:将AndroidManifest.xml文件中的android:targetSdkVersion值修改为小于23 
    方案二:添加运行时权限的处理

    二、当指定拍照图片保存路径的时候,存储目录(文件夹)未创建 
    解决方案:

    调用系统相机拍照之前先创建存储目录

  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/whycxb/p/6818222.html
Copyright © 2011-2022 走看看