Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ML Kit Document Scannerを導入してみた

Pike8
April 27, 2024

ML Kit Document Scannerを導入してみた

Pike8

April 27, 2024
Tweet

Other Decks in Programming

Transcript

  1. 実装 @Composable fun DriverLicenseImageSelectButton( selectDriverLicenseImage: (Uri) -> Unit, modifier: Modifier

    = Modifier, ) { val context = LocalContext.current val documentScannerLauncher = rememberLauncherForActivityResult( ActivityResultContracts.StartIntentSenderForResult(), ) { activityResult -> activityResult.getSelectedImage()?.let(selectDriverLicenseImage) } Box( contentAlignment = Alignment.Center, modifier = modifier // Χʔυͷ֎؍Λઃఆ .clickable { documentScannerLauncher.launchDocumentScan(context) } ) { // Χʔυͷத਎Λදࣔ } } private fun ActivityResult.getSelectedImage(): Uri? { // ࡱӨ͞Εͨը૾ΛऔΓग़͢ } private fun ManagedActivityResultLauncher<IntentSenderRequest, ActivityResult>.launchDocumentScan(
 context: Context
 ) { // Document ScannerΛىಈ }
  2. 実装 @Composable fun DriverLicenseImageSelectButton( selectDriverLicenseImage: (Uri) -> Unit, modifier: Modifier

    = Modifier, ) { } private fun ActivityResult.getSelectedImage(): Uri? { if (resultCode != Activity.RESULT_OK) { return null } val result = GmsDocumentScanningResult.fromActivityResultIntent(data) return result?.pages?.firstOrNull()?.imageUri } private fun ManagedActivityResultLauncher<IntentSenderRequest, ActivityResult>.launchDocumentScan(
 context: Context
 ) { // Document ScannerΛىಈ } // …
  3. 実装 } private fun ManagedActivityResultLauncher<IntentSenderRequest, ActivityResult>.launchDocumentScan(
 context: Context
 ) {

    val activity = context.findActivity() ?: return val options = GmsDocumentScannerOptions.Builder() // Χϝϥ͚ͩͰ͸ͳ͘ΪϟϥϦʔ͔Βը૾ͷऔΓࠐΈ͕Ͱ͖Δ .setGalleryImportAllowed(true) // ෳ਺ϖʔδΛอଘ͢Δ͜ͱ͕Ͱ͖Δ .setPageLimit(1) // JPEGͷଞʹPDFͰͷอଘ͕Ͱ͖Δ .setResultFormats(GmsDocumentScannerOptions.RESULT_FORMAT_JPEG) // औΓࠐΜͩը૾ʹར༻͢ΔฤूػೳΛબ୒͢Δʢޙड़ʣ .setScannerMode(GmsDocumentScannerOptions.SCANNER_MODE_BASE) .build() val scanner = GmsDocumentScanning.getClient(options) scanner.getStartScanIntent(activity).addOnSuccessListener { intentSender -> this.launch(IntentSenderRequest.Builder(intentSender).build()) } } @Composable fun DriverLicenseImageSelectButton( selectDriverLicenseImage: (Uri) -> Unit, modifier: Modifier = Modifier, ) { } private fun ActivityResult.getSelectedImage(): Uri? { // … // …