"startActivityForResult(android.content.Intent, int)"已被弃用

16
startActivityForResult(intent,3021) 

我使用这个方法已经很长时间了,现在这个方法已经被弃用了吗?


1
你确定吗?请查看 https://developer.android.com/reference/android/app/Activity#startActivityForResult(android.content.Intent,%20int)。 - Jyotish Biswas
2
是的,在新的API中它已经被弃用了。请阅读以下内容:虽然在所有API级别上,Activity类上都提供了底层的startActivityForResult()和onActivityResult() API,但强烈建议使用AndroidX Activity 1.2.0-alpha02和Fragment 1.3.0-alpha02中引入的Activity Result APIs。 使用registerForActivityResult() - Lalit Fauzdar
2
@LalitFauzdar:“是的,在新API中它已经被弃用了”-- 但在Activity上它并没有被弃用(https://developer.android.com/reference/android/app/Activity#startActivityForResult(android.content.Intent,%20int))。在AndroidX版的`Fragment`上它已经被弃用,但替代方案(Activity Result APIs)还需要几个月才能稳定。 - CommonsWare
你是在建议几个月内使用已弃用的方法吗,@CommonsWare? - ice spirit
1
@icespirit:是的。在Android中,“已弃用”意味着“我们有其他东西希望您考虑”。它并不意味着“此代码将在10秒钟内自毁”。 :-) Activity Result API将是长期方向,但Alpha代码仍然是Alpha代码,并且伴随着其自身的风险。如果您想承担这些风险,欢迎您这样做。 - CommonsWare
显示剩余3条评论
1个回答

12

确实已经被弃用了。我试图找出新的方法,并且想在这里分享一下。

现在,我们可以使用registerForActivityResult来为每个回调单独注册,而不是覆盖所有回调并检查请求代码。该函数接受一个ActivityResultContracts参数。在我看来,这比以前的方法更好。

这里是一个启动带返回结果的Activity的例子:

val previewRequest =
           registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
    if (it.resultCode == RESULT_OK) {
        val list = it.data
        // do whatever with the data in the callback
    }
}

现在我们不再使用StartActivityForResult,而是使用

val intent = Intent(this, PreviewFullscreenActivity::class.java)
intent.putStringArrayListExtra(AppConstants.PARAMS.IMAGE_URIS, list)
previewRequest.launch(intent)

1
如果我们想要检查多个requestCode,比如位置、相机、麦克风等,会发生什么?我们需要创建多个请求吗? - Junia Montana
Xamarin Android解决方案:https://www.appliedcodelog.com/2022/02/startactivityforresult-onactivityresult.html,用于弃用的API。 - Suchith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接