ActivityResultLauncher 传递自定义请求代码

ActivityResultLauncher pass custom requestcode

我有一个简单的 ActivityResultLauncher 实现,我可以在其中 select 来自图库的图像:

ActivityResultLauncher<Intent> actResLauncher;
actResLauncher = registerForActivityResult(   new ActivityResultContracts.StartActivityForResult(),this);
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
actResLauncher.launch(intent);

结果:

@Override
public void onActivityResult(ActivityResult  result) {
    if(result.getResultCode()== Activity.RESULT_OK){

    }
}

此代码的问题在于我依赖预定义的结果代码,如 Activity.RESULT_OK 或 Activity.RESULT_CANCELED。有没有办法在启动意图时传递自定义请求代码?

首先,你不需要onActivityResult()。那种方式很旧。您现在拥有用于特定目的的启动器。所以没有更多的请求代码 你现在像下面那样做。 创建一个这样的函数:

ActivityResultLauncher<String> imageActivityResultLauncher = registerForActivityResult(
            new ActivityResultContracts.GetContent(),
            uri -> 
               //do something with uri
            });

然后无论你想在哪里启动它,只要写:

imageActivityResultLauncher.launch("image/*");

有关更多详细信息,请参阅此 Whosebug 答案