2014-09-03 76 views
2

我需要註冊一個廣播接收器,它會告訴我整個系統中的任何種類的Drag事件。我的應用程序將在後臺運行,並執行任何任務,如果任何種類的Drag事件發生,即使其他任何應用程序正在前臺運行。可能嗎?任何想法,我該怎麼做?後臺應用程序聆聽拖動手勢

更新:不要以爲我會做鍵盤記錄。我的應用程序將可見,但會在後臺運行。我想要的只是檢測拖動事件(向左拖動,向右拖動,向上拖動並向下拖動)。 我會接受任何答案,如果你能告訴我怎樣才能顯示4個按鈕,這些是permant,在任何其他應用程序的頂部,因爲這也可以爲我提供我想要的。

+0

這是更好的不可能的,出於隱私和安全的原因。應用程序通常不能監視其他應用程序的UI事件,除了可能在根目錄的設備上。 – CommonsWare 2014-09-03 11:56:53

+0

謝謝CommonsWare。我試圖通過觀看它的凸輪來移動機器人。我計劃將Skype視頻通話用於視頻流,並在屏幕上拖動移動命令。現在,我需要使用Android進行Android視頻流傳輸,對嗎?你可以請分享任何想法,我怎麼能很快實現這一目標?我的會議是非常接近:( – 2014-09-04 06:02:22

+1

CommonsWare ...在較舊版本的Android(我認爲薑餅和更低)這是可能的使用疊加。疊加能夠記錄在屏幕上的按下,無論他們在哪裏完成。 – 2014-09-12 17:20:38

回答

0

我找到了我的答案here。我需要開始一項服務。

0

因此,您的真正需求是能夠將某些輸入傳遞到您的應用程序,同時允許屏幕專用於輸出視頻。

你想過以下內容:設備的

  • 檢測傾斜或取向來控制方向
  • 具有4個NFC標籤,和檢測你是其中那些超過改變方向(可能不會給你一個足夠快的迴應)

也可以有可以直接從通知中選擇的動作,所以你可以有一個或多個通知提供控制方向的動作,並且只允許通知API來處理出現在視頻前的工作。

當然,還有一些應用程序可以在其他應用程序前面覆蓋他們的用戶界面。這樣的例子是Thrutu,儘管你似乎被推遲了時間,並且獲得這樣的解決方案並不容易 - 見How do I implement a slide-out drawer on the Android's call screen?

1

根據您的鏈接,您的應用可以運行爲Service而無需「正常」用戶界面,但我認爲您鏈接的代碼可能會略有過時。

請記住,您的服務必須在前臺運行 - 代碼在鏈接中提供,但未明確調用。沒有在前臺運行,系統可以很好地停止你的應用程序,而不是在後臺運行它。


當我使用這種疊加創建任務切換器,我發現使用TYPE_SYSTEM_ALERT而不是TYPE_SYSTEM_OVERLAY這是必要的。

我宣佈我的窗口參數不FLAG_WATCH_OUTSIDE_TOUCH

WindowManager.LayoutParams params = 
     new WindowManager.LayoutParams(width, height, x, y, 
       WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
         | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
       PixelFormat.TRANSLUCENT); 

您的服務也應確保正確地從WindowManager註銷重疊視圖何時結束。沒有這個,你的應用程序會泄漏內存。

public void onDestroy() 
{ 
    super.onDestroy(); 
    if (overlay != null) 
    { 
     ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(overlay); 
     overlay = null; 
    } 
} 

我看就知道是在做OverlayView.destory()(注意方法名的不正確的拼寫 - 這將是一個好主意,使用正確的名稱,該方法)。