ActivityResultLauncher передает настраиваемый код запроса
У меня есть простая реализация ActivityResultLauncher, в которой я могу выбрать изображение из галереи:
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. Есть ли способ передать пользовательские коды запросов при запуске намерения?
1 ответ
Во-первых, вам не нужно
onActivityResult()
. Этот способ был старым. Теперь у вас есть пусковые установки для определенных целей. Так что больше никаких кодов запросов. Теперь сделайте это, как показано ниже. Создайте такую функцию:
ActivityResultLauncher<String> imageActivityResultLauncher = registerForActivityResult(
new ActivityResultContracts.GetContent(),
uri ->
//do something with uri
});
А затем, где бы вы ни захотели это запустить, просто напишите:
imageActivityResultLauncher.launch("image/*");
Дополнительные сведения см. В этом ответе на stackoverflow /questions/52764337/metod-onactivityresult-super-ustarel-kakaya-alternativa/52764347#52764347