2013-11-08 3 views
1

Я хотел бы получить текущую активность моего приложения и вызвать один из его методов (я внутри службы). Я обнаружил, что мне нужно что-то подобное, но я не могу решить свою проблему. Является ли это возможным?Вызвать метод активности с помощью ActivityManager

ActivityManager am = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> procInfos = am.getRunningAppProcesses(); 
for (int j = 0; j < procInfos.size(); j++) { 
    if (procInfos.get(j).processName.equals("com.android.pm")) { 
     ... 
    } 
} 
+1

Вы не можете общаться с деятельностью вроде этого. если вам нужна связь между службой и активностью, привяжите эту службу к активности ... –

+0

Проблема в том, что служба не вызывается из активности, которую я хочу закрыть. У меня есть активность A, которая вызывает Activity B, которая вызывает службу S, и я хочу, чтобы S вызывал метод A. –

+0

означает, что вы хотите закончить Activbity A из Service S? –

ответ

0

Основываясь на ваш комментарий:

Проблема заключается в том, что служба не вызывается из деятельности, я хотите закрыть. У меня есть активность A, которая вызывает Activity B, которая вызывает услугу S , и я хочу, чтобы S закрыл A.

это неправильный подход. Лучше всего было бы, чтобы Activity A зарегистрировал широковещательный приемник, который прослушивает конкретный Intent. Когда услуга хочет закончить А, она может транслировать конкретный Intent. Таким образом, ваша служба связывает неявно с активностью без необходимости ссылаться на нее или знать, работает ли она.

+0

У вас есть ссылка, пример или что-то еще? Я понимаю, что вы говорите, но я новичок в android. –

+0

Вот несколько руководств по использованию широковещательных приемников: http://www.grokkingandroid.com/android-tutorial-broadcastreceiver/ http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html –

+0

Вы не необходимо объявить получателя в манифесте. В вашей деятельности, возможно, в конце 'onCreate()', создайте экземпляр 'BroadcastReceiver' и реализуйте метод' onReceive() 'для вызова вашего метода активности, а затем вызовите' finish() 'в действие. Затем вам необходимо «зарегистрировать» приемник, чтобы он запускался с использованием специального фильтра цели. Фильтр намерений должен содержать только определенное ДЕЙСТВИЕ, которое вы определяете (это именно ДЕЙСТВИЕ, которое ваша служба будет помещать в намерение трансляции, которое он отправляет). В вашем сервисе позвоните 'sendBroadcast()', чтобы отправить его. –