В Сервисе нет эквивалента startActivityForResult
, поэтому вам нужно сворачивать самостоятельно.
Первый вариант:
Вы можете использовать несколько стандартных инструментов Java для этого, как Object.wait/Object.notify, которые требуют ссылку на общий объект.
Например, объявите где:
public static final Object sharedLock = new Object();
и в службе сделать:
startActivity(new Intent(this, GoogleAuthHelperActivity.class), FLAG_ACTIVITY_NEW_TASK);
synchronized (sharedLock) {
sharedLock.wait();
}
и в деятельности:
// do something upon request and when finished:
synchronized (sharedLock) {
sharedLock.notify();
}
Есть другие более сложные классы для этого в пакете java.util.concurrent, который вы можете использовать для этого. Однако будьте осторожны, чтобы службы выполнялись в том же потоке, что и Activity, поэтому , если вы не запустите новую тему из Сервиса, тогда это не сработает.
Другая возможная проблема заключается в том, что вы не можете предоставить ссылку на объект между ними двумя (потому что они работают в разных процессах). Затем вы должны сигнализировать о завершении другим способом.
Второй вариант:
Вы можете разделить ваш код обслуживания в двух частях (до и после деятельности). Запустите действие и отправьте новое намерение службе, когда вы закончите. После получения этой второй услуги вы продолжите вторую часть.
Я реализовал свой первый вариант, так как для этого потребовался наименьший рефакторинг – user2810895