2010-10-13 81 views
2

我想在Android中實現一項服務,該服務基本上應該監視用戶未觸摸屏幕後所經過的時間。例如,用戶打開Internet或Adobe Reader,開始閱讀並且不再與觸摸屏交互。 我希望我的跑步服務知道用戶沒有觸摸屏幕的時間。 我該怎麼做? 我在考慮兩種方法: 1.更好的方法:在時間過後(服務設置爲在2或5或10分鐘後檢查屏幕是否被觸摸),服務查詢某個系統對象獲取這些信息。 2.不太好的一個(我認爲這可能會影響性能)在屏幕上每觸摸一下,服務都會被通知。如何在觸摸屏幕時獲取服務中的事件?

請幫忙。謝謝。

+0

好的,也許我沒有具體說明我想做什麼。 該服務獲取一個FULL_WAKE_LOCK,它將阻止屏幕熄滅,直到鎖定被釋放。我希望在一定的不活動時間之後,鎖自動釋放。 希望澄清一下。 謝謝。 – Alex 2010-10-13 20:42:46

回答

3

我該怎麼做?

你不知道。

時間過後(服務設置爲2或5或10分鐘後檢查屏幕是否被觸摸),服務查詢該信息的某個系統對象。

當用戶上次觸摸屏幕時,沒有「系統對象」會告訴您。

不太好的一個(我認爲這可能會影響性能)在屏幕上每觸摸一下,服務都會被通知。

無法通知用戶觸摸屏幕的服務。

+0

好的,不確定地相信這個(操作系統是這樣做的,如果你繼續觸摸屏幕然後屏幕永遠不會關閉,所以操作系統知道用戶正在使用手機......),那麼它已經作爲另一種方法來查找用戶是否與手機進行了互動...... – Alex 2010-10-13 15:13:35

+1

@Alex:歡迎您自定義Android固件並讓它做任何你想做的事情。但是,如果您嘗試創建Android SDK應用程序,則服務無法知道UI的狀態,特別是其他應用程序的UI。有許多可以監控的廣播意圖,其中一些(ACTION_SCREEN_OFF和ACTION_USER_PRESENT)與您所尋找的數據有關。然而,你沒有解釋你正在努力達到什麼目標,所以我們的能力很有限,無論你真的想在這裏做什麼,我們都會給你建議。 – CommonsWare 2010-10-13 15:30:35

+0

@CommonsWare - 好的,我有一個用例:辦公室外的平板電腦,用於傳達關於這個辦公室是否可用的信息。員工應該也可以自由地將其用於其他用途(閱讀新聞?),但默認屏幕應該是展示辦公室信息的活動。因此,在用戶使用該設備後的2-3分鐘後,它應該自動恢復到該屏幕。現在,我怎麼知道這一次已經過去?一種方法是聽取「屏幕關閉」,然後重新開啓,然後開始活動。其他解決方案? – 2012-04-10 14:55:48

1

你不能這樣做,因爲它需要訪問應用程序可以用來從系統的其他部分中刪除數據的數據,否則它將無法訪問該數據。這是一個安全問題; API不提供避免惡意用途的手段。用戶將不得不使用修改的ROM。

無論如何,事件監聽器是bound to View objects;您自己的應用程序的View對象是您可以在觸摸事件上觀看的唯一事物。另外,雖然我們在 - Services aren't meant for UI interaction(儘管應用程序可以在運行時向它們發送信號和數據)。

+0

好吧,我開始相信這是不可能的...... :) – Alex 2010-10-13 15:36:11

+0

好吧,我開始相信這是不可能的...... :)然後我有另一個想法,即經過一段時間後,服務將彈出一個alertdialog,如「嘿,你還在嗎?」如果它沒有得到答案,那麼它可以假設用戶不在那裏:) – Alex 2010-10-13 15:42:19

+0

@亞歷克斯:可行,只是潛在的刺激。 :)儘管如此,請參閱CommonsWare的評論 - 廣播意圖可能更符合您的需求,允許您響應顯然存在的用戶。 – 2010-10-13 17:03:46