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)
