📜  requestCode registerForActivityResult 只能使用低 16 位 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:34:42.714000             🧑  作者: Mango

关于 requestCoderegisterForActivityResult 和使用低 16 位的限制

在 Android 开发中,有时需要启动一个子活动并从其返回结果。为此,我们可以使用 startActivityForResult() 方法。该方法需要两个参数:要启动的子活动的 Intent 对象及一个 requestCode

在 Kotlin 或 Java 等语言中,我们也可以使用 ActivityResultLauncher 来启动一个子活动。这比原来的方式更加灵活、可读性更高。

当我们使用 registerForActivityResult() 方法来创建一个 ActivityResultLauncher 实例时,也需要指定一个 requestCode

然而,requestCode 是一个整数,且有着极大的范围。如果我们使用了过大的 requestCode 或者没有良好的命名规则来管理它们,就可能会出现互相覆盖的情况。因此,我们需要在使用 requestCode 时特别细心。

另外值得注意的是,requestCode 只能使用低 16 位。这是因为在 Android 系统中,高 16 位可能会由系统内部使用。如果我们使用了高 16 位来作为 requestCode,就可能会产生冲突。

以下是一个 TypeScript 版本的代码片段,展示了如何使用 ActivityResultLauncherregisterForActivityResult() 方法:

import { ActivityResultCallback, ActivityResultLauncher, registerForActivityResult } from 'react-native'

// 创建一个 ActivityResultLauncher 实例,并指定 requestCode 为 1234
const myLauncher: ActivityResultLauncher<string> = registerForActivityResult({ requestCode: 1234 }, (result) => {
  if (result.resultCode == 'RESULT_OK') {
    console.log('Received result:', result.data)
  } else {
    console.log('Activity cancelled or failed:', result)
  }
})

// 接下来可以在合适的时候调用 `myLauncher.launch()` 来启动一个子活动。
// 在子活动返回结果后,会调用回调函数并传入结果信息。我们可以根据结果信息进行相应的处理。

以上代码中,我们通过 registerForActivityResult() 方法创建了一个 myLauncher 实例,并指定它的 requestCode 为 1234。这个 myLauncher 实例可以用来启动一个子活动,并在子活动返回结果时调用回调函数。

总结

requestCode 是一个整数值,我们需要特别注意其取值范围和命名规则,避免互相冲突。同时,由于系统内部可能会使用高 16 位,因此我们只能使用低 16 位来作为 requestCode

在使用 ActivityResultLauncher 的时候,我们可以通过 registerForActivityResult() 方法来创建一个实例,并在其中指定 requestCode 和回调函数等信息。并且我们可以在使用 ActivityResultLauncher 的过程中非常灵活地处理回调等操作。