2012-04-25 17 views
6

Co próbuję zrobić, to wysłać zdarzenie ruchu do aktualnie działającej aktywności. Mam ten componentName bieżącej działalności z tym kodemOtrzymasz wystąpienie aktualnie działającej aktywności?

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; 

Teraz mam nazwę komponentu, chcę wywołania zdarzenia

dispatchTouchEvent(MotionEvent ev) 

że jest w klasie Activity i zrobić to potrzebuję przykładu bieżącej działalności. Utknąłem na nazwę komponentu. Jak mogę uzyskać instancję Activity, aby móc wysłać wydarzenie?

+1

proszę umieścić trochę więcej wysiłku w formatowaniu kodu następnym razem ... –

Odpowiedz

7

Wow, jest tak wiele rzeczy nie tak z tym pytaniem, że trudno wiedzieć, od czego zacząć! Weźmy je w kolejności:

co próbuję zrobić, to do wywołania zdarzenia ruchu do aktualnie prowadzenia działalności

Obecna aktywność planie dostanie zdarzeń ruchu, chyba, że ​​nie powinien. Jedyny sposób, w jaki mogę to sobie wyobrazić, jest taki, że twoja usługa umieściła okno systemowe, które znajduje się na górze wszystkich aplikacji ... i w takim przypadku, zachęcam cię, żebyś tego nie robił i po prostu niech twój pierwszy plan aktywność obsługuje wydarzenie.

Mam ten componentName bieżącej działalności z tym kodem

ActivityManager.getRunningTasks() jest nie dla normalnego rozwoju aplikacji. Jest to przeznaczone dla takich osób, jak menedżerowie zadań i tacy. Nigdy nie powinieneś pisać logiki programu rdzeniowego, która ma zależności od informacji zwracanych przez tę funkcję. To błaganie o kłopoty, aw rzeczywistości mogę zagwarantować, że taki kod w pewnym momencie się zepsuje. (Co się dzieje, gdy wiele aplikacji może być uruchomiony z przodu w tym samym czasie?)

chcę wywołania zdarzenia

Naprawdę, naprawdę nie powinno być zgrywanie zdarzeń ruchu z jednego okna i wrzucanie ich do innego. Różne stan wysyłki nie zostanie poprawnie skonfigurowany, stan w zdarzeniu nie będzie spójny (zdarzenie zostało skonfigurowane z punktem początkowym i takim dla oryginalnego okna, a nie nowym, do którego je wprowadzasz) itp. Jest to kolejna świetny sposób na stworzenie niestabilnej aplikacji, która ma duże szanse na przełamanie w przyszłości, jeśli uda ci się ją nawet wykorzystać do dzisiejszego działania.

Utknąłem na nazwę komponentu. Jak mogę uzyskać instancję Activity, aby móc wysłać wydarzenie?

Rzeczywiście, wszystko, co masz, to nazwa komponentu. To nie ma nic wspólnego z aktywnymi instancjami. Nie ma magicznego sposobu na przekształcenie tego w rzeczywistą instancję. Niewłaściwe byłoby dostarczenie jednego, ponieważ może to być łatwo niejednoznaczne (gdyby wystąpiły dwa wystąpienia tej klasy).

Chyba trzeba back-up na początku i patrzeć na to, co rzeczywiście chce osiągnąć, aby uzyskać pomoc na co rozsądnym sposobem podejścia jest. Ścieżka, w której się dostałeś, jest w tym momencie dość nietrwała.

+0

Dziękuję za szczegółową odpowiedź, ale dlaczego te metody są tam w API, nie będzie jakoś z nich korzystać – Ahmed

+0

podobne metody logicznej \t dispatchGenericMotionEvent (MotionEvent ev) Wywoływany w celu przetworzenia ogólnych zdarzeń ruchu. boolean \t dispatchKeyEvent (zdarzenie KeyEvent) Wywoływany w celu przetwarzania kluczowych zdarzeń. boolean \t dispatchKeyShortcutEvent (zdarzenie KeyEvent) Wywoływane w celu przetworzenia zdarzenia skrótu klawiaturowego. boolean \t dispatchPopulateAccessibilityEvent (zdarzenie AccessibilityEvent) Wywoływana w celu przetwarzania populacji AccessibilityEvents. boolean \t dispatchTouchEvent (MotionEvent ev) Wywoływany w celu przetwarzania zdarzeń na ekranie dotykowym. boolean \t dispatchTrackballEvent (MotionEvent ev) Wywoływany w celu przetwarzania zdarzeń trackballa. – Ahmed

+1

Zasadniczo nie jestem zainteresowany tym, że ta metoda spowoduje awarię aplikacji pewnego dnia, muszę ją wykonać w stanie, pomimo tych szczególnych przypadków, o których wspomniałeś. – Ahmed

Powiązane problemy