Внутри onCreate
внутри Activity
я хотел бы узнать, доступен ли и работает ли Service
в другом приложении (которое я также пишу). Проблема с AIDL заключается в том, что синхронной опции нет. Я бы хотел, чтобы моя активность действительно ожидала, доступна ли Service
и действует соответственно, если это не так.
Лучший ответ, который я придумал, заключается в том, чтобы служба открыла сокет TCP и чтобы Activity попыталась подключиться к нему. Если это удастся, то Activity onCreate
будет знать, что услуга доступна. Однако в лучшем случае это kludge.
Итак, в нижней строке: как моя активность onCreate
синхронно проверяет, доступна ли внешняя Service
и предпринимает действия перед возвратом из подпрограммы onCreate
?
Вы можете прокручивать список, возвращенный общедоступным List<ActivityManager.RunningServiceInfo> getRunningServices (int maxNum)
. Каждая ActivityManager.RunningServiceInfo
содержит необходимую информацию
ActivityMAnager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
ArrayList<ActivityManager.RunningServiceInfo> rsiList = am.getRunningServices (999);
boolean found = null;
for (ActivityManager.RunningServiceInfo rsi: rsiList) {
if (rsi.service.getPackageName().equals("MYPACKAGE") {
found = true;
break;
}
}
if (found) {
// do whatever
} else {
// alternative
}