2012-04-25 91 views
6

我想要做的是將運動事件分派給當前正在運行的活動。我已經得到了當前活動的單元名從這個代碼現在,我有分量的名字獲取當前正在運行的活動的實例嗎?

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

請在下次格式化您的代碼時多加一點努力... – 2012-04-25 22:55:02

回答

7

哇,這個問題有很多錯誤,很難知道從哪裏開始!讓我們把它們依次是:

什麼,我試圖做的是派遣運動事件當前正在運行的活動

當前前景色活動將得到移動事件,除非它不應該。我可以想象這種方式的唯一途徑就是你的服務已經把系統窗口放在了所有的應用程序之上......在這種情況下,我會敦促你不要這樣做,只讓你的前臺活動處理事件。

我已經拿到了當前活動的單元名從這個代碼

ActivityManager.getRunningTasks()是正常應用程序的開發。這適用於任務管理器等。你不應該編寫依賴於這個函數返回的信息的核心程序邏輯。這是乞求麻煩,事實上我可以保證這樣的代碼會在某個時候破壞。 (當多個應用程序可以在前面的同時運行,會發生什麼?)

我想

你真的調度事件,真的不應該抓取運動事件出來一個窗口並把它們塞進另一個。各種派遣狀態不會被正確設置,事件中的狀態將不一致(事件是由原始窗口的起源等設置的,而不是新填充的),等等。這是另一種如果你今天可以拼湊它,使其在今天工作,那麼很好的方式可以製作出一個很有可能在未來破發的片狀應用程序。

我被困在組件名稱。我如何獲取Activity實例以便我可以分派事件?

的確,您擁有的只是一個組件名稱。這與活動實例無關。沒有什麼神奇的方法可以將它變成一個實際的實例。提供一個會是錯誤的,因爲這很容易模糊(如果這個類實例化了兩個實例)。

我認爲你需要備份到一開始,看看你實際上想要完成什麼,以獲得關於接近它的合理方式的幫助。你已經得到的道路是在這個漂亮的終端。

+0

感謝您的詳細解答,但爲什麼這些方法在API中有,還有一些方法可以使用它們 – Ahmed 2012-04-26 14:06:12

+0

布爾方法\t dispatchGenericMotionEvent( MotionEvent ev) 調用來處理通用運動事件。 布爾型\t dispatchKeyEvent(KeyEvent事件) 調用來處理關鍵事件。 布爾型\t dispatchKeyShortcutEvent(KeyEvent事件) 調用來處理鍵快捷鍵事件。 布爾值\t dispatchPopulateAccessibilityEvent(AccessibilityEvent事件) 調用來處理AccessibilityEvents的人口。 布爾值\t dispatchTouchEvent(MotionEvent ev) 調用來處理觸摸屏事件。 布爾型\t dispatchTrackballEvent(MotionEvent ev) 調用來處理軌跡球事件。 – Ahmed 2012-04-26 14:06:29

+1

基本上我不感興趣,這種方法將有一天會崩潰的應用程序,我必須使它在運行條件下,儘管你提到這些特殊情況。 – Ahmed 2012-04-26 14:24:08

相關問題