activity : раньше вызываем startActivityForResult, ответ получаем через возращаемый интент. Сейчас правильнее через ActivityResultLauncher и ActivityResultContracts.
В приложении, которое вызываем особых изменений нет. Делаем setResult(RESULT_OK, intent); finish();
service: тут потребуется разобраться с aidl. Из приложения клиента биндимся на службу, после удачного соединения вызываем удаленные методы. В приложении сервере определяем экспортируемую службу. Этот вариант предполагает, что хорошо разбираетесь с потоками. executor, handler