代码之家  ›  专栏  ›  技术社区  ›  KolaYAndr

活动RESULT_OK似乎从未发生过

  •  0
  • KolaYAndr  · 技术社区  · 11 月前

    我目前正在更改应用程序中的电子邮件。任务是打开一个电子邮件应用程序(如果有多个电子邮件应用可用,则显示选择器),一旦用户选择了一个应用程序,导航到EmailChangedChensive屏幕。

    以下是相应的代码:

    val launcher = rememberLauncherForActivityResult(
         contract = ActivityResultContracts.StartActivityForResult(),
         onResult = { result ->
             Log.d("result", result.toString())
             if (result.resultCode == Activity.RESULT_OK) onToStep(ChangeEmailStep.EmailChangedSuccessfully)
         }
    )
    
    BasicButton(
        text = stringResource(R.string.open_mail),
        modifier = Modifier.padding(top = 12.dp),
        onClick = {
            val intent = Intent
                .makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_EMAIL)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            launcher.launch(intent)
        },
        paddingValues = PaddingValues(10.dp)
    )
    

    问题是,一旦选择器打开,我就会看到记录的结果如下:

    2025-01-31 21:31:41.469 12357-12357 result              D  ActivityResult{resultCode=RESULT_CANCELED, data=null}
    

    我希望得到活动。用户选择应用程序时的RESULT_OK。我也试过这个

    launcher.launch(Intent.createChooser(intent, "choose email app"))
    

    当选择器出现时,我停止接收RESULT_CANCELLED,但当我回到我的应用程序时,我仍然收到RESULT_CANCELLED。我应该改变什么来实现预期的行为?

    UPD: 我还应该提到,我的活动

    android:launchMode="standard"
    
    1 回复  |  直到 11 月前
        1
  •  0
  •   CommonsWare    11 月前

    如所述 the documentation ,the ACTION_MAIN 协议没有输出,因此大多数实现 ACTION_MAIN 不会返回结果。默认值为 RESULT_CANCELLED .

    换句话说,你的期望是不正确的。