onActivityResult 标记为已过时

onActivityResult  虽然标记为已过时 不过暂时还可以使用

/*
onActivityResult 已经标记为已过时
点击super.onActivityResult查看源码,可以看见官方已经给了新的使用替换方式
使用registerForActivityResult 方法 注意是一个final方法 返回ActivityResultLauncher类型
初始化为一个常量使用,注意没法直接区分请求类型
我们可以使用一个ActivityResultLauncher常量就对应一个类型的请求
比如我这里 图库选择回调、拍照回调、系统裁剪回调  定义三个 ActivityResultLauncher 常量 分别对三种回调的处理
调用ActivityResultLauncher.launch(intent)
*/
//    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
//        super.onActivityResult(requestCode, resultCode, data)
//        MyLog.d(TAG, "onActivityResult $requestCode     $resultCode   $data")
//        when (resultCode) {
//            Activity.RESULT_OK -> when (requestCode) {
//                CameraStatus.CAMERA_REQUEST_CODE -> {
//                    // 拍照回调
//                    startPhotoZoom(photoUri, 300, true)
//                }
//                CameraStatus.GALLERY_REQUEST_CODE -> {
//                    MyLog.d(TAG, "相册回调 data=${data} c=${data?.data} action=${data?.action}")
//                    if (data?.data != null) {
//                        startPhotoZoom(data.data!!, 300, false)
//                    } else {
//                        Toast.makeText(context, "选择的图片可能有问题,换一张图片试试", Toast.LENGTH_SHORT).show()
//                    }
//                }
//                CameraStatus.CROP_REQUEST_CODE -> {
//                    MyLog.d(TAG, "裁剪回调 data=${data} c=${data?.data} action=${data?.action}")
//                    if (data?.data != null) {
//                        upPic(data.data)
//                    } else {
//                        upPic(photoCropUri)
//                    }
//                }
//            }
//            Activity.RESULT_CANCELED -> {
//                Toast.makeText(context, "您取消了操作", Toast.LENGTH_SHORT).show()
//                findNavController().popBackStack()
//            }
//            else -> {
//                Toast.makeText(context, "回调异常", Toast.LENGTH_SHORT).show()
//                findNavController().popBackStack()
//            }
//        }
//    }

 使用 registerForActivityResult 处理activity返回回调

/**
     * 2022-03-30 15:48
     * 选择相册(图库)回调
     */
    private val galleryRegisterActivity =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            MyLog.d(TAG, "registerForActivityResult:${it.resultCode} ${it.data}")
            if (it.resultCode == Activity.RESULT_OK) {
                MyLog.d(TAG, "相册回调 data=${it} c=${it.data}")
                if (it.data?.data != null) {
                    startPhotoZoom(it.data?.data, 300, false)
                } else {
                    Toast.makeText(context, "选择的图片可能有问题,换一张图片试试", Toast.LENGTH_SHORT).show()
                }
            }
        }

    /**
     * 2022-03-30 15:54
     * 拍照回调
     */
    private val cameraRegisterActivity =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            MyLog.d(TAG, "拍照回调:${it.resultCode}  ${it.data?.data}")
            if (it.resultCode == Activity.RESULT_OK) {
                if (it.data?.data != null) {
                    startPhotoZoom(it.data?.data, 300, true)
                } else {
                    startPhotoZoom(photoUri, 300, true)
                }
            }
        }

 

调用相册

val intent = Intent(Intent.ACTION_PICK)
        //val intent = Intent(Intent.ACTION_GET_CONTENT)//intent隐式调用启动相册界面
        // intent.type = "image/*"//设置数据类型
        intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*")
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
        }
        // startActivityForResult(intent, CameraStatus.GALLERY_REQUEST_CODE)
        // 上面的方法过时了,使用替代方法
        galleryRegisterActivity.launch(intent)

 

posted @ 2022-04-15 10:50  荣超  阅读(786)  评论(0编辑  收藏  举报