2012-04-25 3 views
6

То, что я пытаюсь сделать, - отправить событие движения в текущую активность. Я получил ComponentName текущей деятельности от этого кодаПолучить экземпляр текущей активности?

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 

// get the info from the currently running task 
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 

Log.d("current task :", "CURRENT Activity ::" + 
      taskInfo.get(0).topActivity.getClassName()); 

ComponentName componentInfo = taskInfo.get(0).topActivity; 

Теперь у меня есть имя компонента, я хочу, чтобы отправлять событие

dispatchTouchEvent(MotionEvent ev) 

, который находится в Activity классе, и сделать мне нужен экземпляр текущей деятельности. Я застрял в имени компонента. Как я могу получить экземпляр Activity, чтобы я мог отправить событие?

+1

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

ответ

7

Ничего себе, в этом вопросе так много чего не так, трудно понять, с чего начать! Давайте их в следующем порядке:

Что я пытаюсь сделать, это направить событие движения в настоящее время работает активность

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

Я получил ComponentName текущей деятельности от этого кода

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

Я хочу послать событие

Вы действительно, на самом деле не должно быть копирования событий движения из одного окна и набивая их другим. Состояние отправки не будет настроено правильно, состояние в событии не будет согласованным (событие было настроено с использованием источника и для исходного окна, а не нового, в которое вы его набиваете) и т. Д. Это другое отличный способ сделать сломанное приложение, которое имеет хорошие шансы взломать в будущем, если вы даже можете клонировать его, чтобы заставить его работать сегодня.

Я застрял на имени компонента. Как я могу получить экземпляр Activity, чтобы я мог отправить событие?

Действительно, все, что у вас есть, является именем компонента. Это не имеет ничего общего с активными экземплярами. Нет волшебного способа превратить это в фактический экземпляр. Было бы неправильно поставлять один, потому что это может быть легко двусмысленным (если было два экземпляра этого экземпляра).

Я думаю, вам нужно выполнить резервное копирование до самого начала и посмотреть, что вы на самом деле пытаетесь выполнить, чтобы получить помощь в отношении того, какой разумный способ приблизиться к нему. Путь, к которому вы попали, на данный момент довольно терминальный.

+0

Спасибо за подробный ответ, но почему эти методы есть в API, будет каким-то образом использовать их – Ahmed

+0

методы, такие как логическое \t dispatchGenericMotionEvent (MotionEvent ev) Вызывается для обработки общих событий движения. boolean \t dispatchKeyEvent (событие KeyEvent) Вызывается для обработки ключевых событий. boolean \t dispatchKeyShortcutEvent (событие KeyEvent) Вызывается для обработки ключевого события ярлыка. boolean \t dispatchPopulateAccessibilityEvent (событие AccessibilityEvent) Вызывается для обработки популяции AccessibilityEvents. boolean \t dispatchTouchEvent (MotionEvent ev) Вызывается для обработки событий сенсорного экрана. boolean \t dispatchTrackballEvent (MotionEvent ev) Вызывается для обработки событий трекбола. – Ahmed

+1

В принципе меня не интересует, что этот метод однажды вызовет крах приложения, я должен сделать это в рабочем состоянии, несмотря на эти особые случаи, которые вы упомянули. – Ahmed

Смежные вопросы