takephoto集成,拍照、相册选择出现 Permission Denial 问题。

来源:4-6 编辑用户-TakePhoto选择图片功能开发

慕仔4104895

2018-09-06

takephoto的集成问题

在6.0以上的设备上,拍照和从相册选择图片,均出现了无法获得权限问题。takephoto自动管理权限了,出现这个问题,是什么原因呢?

写回答

5回答

慕前端0194211

2018-11-18

我参考这个博客(Android开发学习之路-Android6.0运行时权限)解决了问题,代码如下:


private fun showAlertView() {
   AlertView("选择图片", "", "取消", null, arrayOf("拍照", "相册"), this,
       AlertView.Style.ActionSheet, object : OnItemClickListener {
           override fun onItemClick(o: Any?, position: Int) {
               mTakePhoto.onEnableCompress(CompressConfig.ofDefaultConfig(), false)
               when (position) {
                   0 -> {
                       createTempFile()
                       checkCameraPermission()

                   }
                   1 -> mTakePhoto.onPickFromGallery()
               }
           }
       }).show()
}


fun checkCameraPermission() {
   if (Build.VERSION.SDK_INT >= 23) {
       val checkCallPhonePermission =
           ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
       if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
           ActivityCompat.requestPermissions(
               this,
               arrayOf(Manifest.permission.CAMERA),
               1// 1:OPEN_CANMER
           )
           return
       } else {
           capture()
       }
   } else {
       capture()
   }
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
   super.onRequestPermissionsResult(requestCode, permissions, grantResults)
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
       !shouldShowRequestPermissionRationale(Manifest.permission.CAMERA))
   {
       AskForPermission()
       return
   }
   when (requestCode) {
       1 -> {//OPEN_CANMER
           if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
               capture()
           } else {
               toast("相机权限禁用了。请务必开启相机权")
           }
       }
       else ->
           super.onRequestPermissionsResult(requestCode, permissions, grantResults);
   }
}

private fun AskForPermission() {
   var builder: AlertDialog.Builder = AlertDialog.Builder(this)
   builder.setTitle("需要摄像头权限")
   builder.setNegativeButton("取消", object : DialogInterface.OnClickListener {
       override fun onClick(dialog: DialogInterface, which: Int) {

       }
   })
   builder.setPositiveButton("Settings", object : DialogInterface.OnClickListener {
       override fun onClick(dialog: DialogInterface, which: Int) {
           var intent: Intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
           intent.setData(Uri.parse("package:${getPackageName()}")) // 根据包名打开对应的设置界面
           startActivity(intent)
       }
   })
   builder.create().show()
}

fun capture() {
   mTakePhoto.onPickFromCapture(Uri.fromFile(mTempFile))
}


0
0

yundomo

2018-09-24

3.重写onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults),添加如下代码。

4.重写TPermissionType invoke(InvokeParam invokeParam)方法,添加如下代码

5.添加如下代码获取TakePhoto实例:

照着这3步弄了下, 就可以了.

0
2
慕前端0194211
你的这个步骤应该是TakPhoto github上推荐的做法 具体地址是: https://github.com/crazycodeboy/TakePhoto
2018-11-18
共2条回复

yundomo

2018-09-24


E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/20180805_155653_002.jpg (Permission denied)

    Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/20180805_155653_002.jpg (Permission denied)

 E/takePhoto:  Picture compression failure:像素压缩失败,bitmap is null picturePath:null

Android 6.0

0
0

yundomo

2018-09-24

我也遇到了这个问题


0
0

雷宇

2018-09-10

代码控制一下吧~

0
0

Kotlin打造完整电商APP 模块化+MVP+主流框架

全网稀缺Kotlin项目实战,打造新一代Android工程师的核心竞争力

694 学习 · 209 问题

查看课程