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 答案
我有一个简单的 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 答案