diff --git a/app/src/main/java/io/legado/app/ui/qrcode/QrCodeActivity.kt b/app/src/main/java/io/legado/app/ui/qrcode/QrCodeActivity.kt index 72a2f980b..93680630e 100644 --- a/app/src/main/java/io/legado/app/ui/qrcode/QrCodeActivity.kt +++ b/app/src/main/java/io/legado/app/ui/qrcode/QrCodeActivity.kt @@ -1,11 +1,11 @@ package io.legado.app.ui.qrcode -import android.app.Activity import android.content.Intent import android.graphics.BitmapFactory import android.os.Bundle import android.view.Menu import android.view.MenuItem +import androidx.activity.result.contract.ActivityResultContracts import com.google.zxing.Result import com.king.zxing.CameraScan.OnScanResultCallback import io.legado.app.R @@ -16,7 +16,12 @@ import io.legado.app.utils.readBytes class QrCodeActivity : BaseActivity(), OnScanResultCallback { - private val requestQrImage = 202 + private val selectQrImage = registerForActivityResult(ActivityResultContracts.GetContent()) { + it.readBytes(this)?.let { bytes -> + val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size) + onScanResultCallback(QRCodeUtils.parseCodeResult(bitmap)) + } + } override fun getViewBinding(): ActivityQrcodeCaptureBinding { return ActivityQrcodeCaptureBinding.inflate(layoutInflater) @@ -37,12 +42,7 @@ class QrCodeActivity : BaseActivity(), OnScanResul override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.action_choose_from_gallery -> { - val intent = Intent(Intent.ACTION_GET_CONTENT) - intent.addCategory(Intent.CATEGORY_OPENABLE) - intent.type = "image/*" - startActivityForResult(intent, requestQrImage) - } + R.id.action_choose_from_gallery -> selectQrImage.launch("image/*") } return super.onCompatOptionsItemSelected(item) } @@ -55,16 +55,4 @@ class QrCodeActivity : BaseActivity(), OnScanResul return true } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - data?.data?.let { - if (resultCode == Activity.RESULT_OK && requestCode == requestQrImage) { - it.readBytes(this)?.let { bytes -> - val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size) - onScanResultCallback(QRCodeUtils.parseCodeResult(bitmap)) - } - } - } - } - } \ No newline at end of file