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

Другие вопросы по тегам