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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM