CysionLiu / ImagePicker

仿微信的图片选择,支持AndroidX,适配Android Q
Apache License 2.0
321 stars 71 forks source link

咨询一个与项目有点关系的问题 #51

Closed hy20160705 closed 4 years ago

hy20160705 commented 4 years ago

之前我的项目我用了这个项目的前身com.lzy.imagepicker 调用摄像头没有发生过异常 现在我有一个特别小的项目 只是简单的调用摄像头拍照 所以没有引用你的库 问题 在我的项目中 只是简单的拍照+图片上传 在调用摄像头的过程中 有些手机机型抱了crash 也在网上查了许久 但是还是没有解决 请问一下这个问题是怎么导致的呢 谢谢🙏

main(1)

java.lang.SecurityException

Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.huawei.camera/.ThirdCamera clip={text/uri-list U:content://com.chs.cxrbusinessclient.fileprovider/external_storage_root/Android/data/com.chs.cxrbusinessclient/cache/MyPhoto/20200327152211.png} (has extras) } from ProcessRecord{cb7fbf7 13570:com.chs.cxrbusinessclient/u0a176} (pid=13570, uid=10176) with revoked permission android.permission.CAMERA

* 项目简单代码

// 调用摄像头拍照 case R.id.iv_store_photo: //权限没有授权,进入授权界面 if (mPermissionsChecker.judgePermissions(PERMISSIONS)) { ActivityCompat.requestPermissions(this, PERMISSIONS, TAKEPHOTO_REQUEST_CODE); } else { takePhotoMethod(); } break;

// 权限申请回调 onRequestPermissionsResult(){ if (requestCode == TAKEPHOTO_REQUEST_CODE && hasAllPermissionsGranted(grantResults)) { takePhotoMethod(); } else if (requestCode == TAKEPHOTO_REQUEST_CODE) { ToastUtils.showShortToast("请手动开启app相机和存储权限"); goIntentSetting(); } }

// 调起摄像头拍照 String fileName = ""; private void takePhotoMethod() { fileName = CameraPhotoUtils.getPhotoFileName(this);

    // new一个File用来存放拍摄到的照片
    File imageFile =new File(fileName);
    // 如果存在就删了重新创建
    try {
        if (imageFile.exists()) {
            imageFile.delete();
        }
        imageFile.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 将存储地址转化成uri对象
    if (Build.VERSION.SDK_INT >= 24) {
        photoUri = FileProvider.getUriForFile(ApplyBusinessActivity.this, ApplyBusinessActivity.this.getApplicationContext().getPackageName() + ".fileprovider", imageFile);
    } else {
        photoUri = Uri.fromFile(imageFile);
    }
    // 设置打开照相的Intent
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    // 设置相片的输出uri为刚才转化的imageUri
    intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
    // 开启相机程序,设置requestCode为TOKE_PHOTO
    startActivityForResult(intent, TAKE_PHOTO);
}

/**相关方法***/ // 含有全部的权限 private boolean hasAllPermissionsGranted(int[] grantResults) { for (int grantResult : grantResults) { if (grantResult == PackageManager.PERMISSION_DENIED) { return false; } } return true; } // mPermissionsChecker.judgePermissions() /**

CysionLiu commented 4 years ago

抱歉,这么晚才看到。相信你已经解决了问题。