请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

takephoto的集成问题

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

正在回答 回答被采纳积分+3

5回答

慕前端0194211 2018-11-18 02:08:33

我参考这个博客(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 回复 有任何疑惑可以回复我~
yundomo 2018-09-24 05:21:43

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

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

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

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

0 回复 有任何疑惑可以回复我~
  • 我这里也遇到了这个问题。你的解决代码没显示出来,可以补上吗?
    回复 有任何疑惑可以回复我~ 2018-11-18 00:49:38
  • 你的这个步骤应该是TakPhoto github上推荐的做法
    具体地址是:
    https://github.com/crazycodeboy/TakePhoto
    回复 有任何疑惑可以回复我~ 2018-11-18 02:21:36
yundomo 2018-09-24 05:07:53

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 回复 有任何疑惑可以回复我~
yundomo 2018-09-24 05:06:51

我也遇到了这个问题


0 回复 有任何疑惑可以回复我~
雷宇 2018-09-10 01:08:59

代码控制一下吧~

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信