2012-04-28 41 views
0

我的應用程序依賴意圖ACTION_USER_PRESENT被解僱,所以我在清單中設置了一個接收器,並且我有一個在接收到意圖時啓動服務的類。我如何收到第三方意圖,然後採取行動?

但是,當用戶使用像WidgetLocker這樣的鎖屏替換應用程序時,ACTION_USER_PRESENT意圖可能永遠不會被髮送,或者可能被髮送一堆次。 (一旦發送5次...)WidgetLocker的網站解釋說,應用程序確實發送了自己的解鎖意圖,com.teslacoilsw.widgetlocker.intent.UNLOCKED。在某些WidgetLocker配置中,ACTION_USER_PRESENT可能會在用戶解鎖屏幕之前觸發,因此我被告知最好設置一個支票com.teslacoilsw.widgetlocker.intent.LOCKED,然後等待收到UNLOCKED意圖並完成我的工作。

我的問題是,我不知道如何爲第三方意圖設置接收器。我已經將這些操作添加到清單中的接收器中,並且我知道我的廣播接收器會將它們選中,但我需要將它們濾除。主要是,如果我拿起LOCKED的意圖,我想忽略任何ACTION_USER_PRESENT意圖,而不是等待UNLOCKED意圖,但我不知道如何等待一個意圖接收不同的意圖。

+0

「我的應用程序依賴意圖ACTION_USER_PRESENT被解僱」 - 我會盡量消除這個要求。 – CommonsWare 2012-04-28 16:17:50

+0

這是爲什麼?我的應用程序的主要特點是,當你解鎖你的屏幕時,祝酒你作爲提醒,所以這是一個需求... – 2012-04-28 16:25:24

+0

啊,對不起,沒關係。我在想'ACTION_USER_PRESENT'需要一個永久的服務。 – CommonsWare 2012-04-28 16:28:23

回答

1

主要是,如果我拿起鎖定的意圖,我想忽略任何ACTION_USER_PRESENT意圖,而是等待解鎖的意圖,但我不知道如何在接收到不同的一個等待的意圖。

第1步:爲WidgetLocker行動與ACTION_USER_PRESENT創建獨立的BroadcastReceivers

步驟#2:收到LOCKED後,請使用PackageManagersetComponentEnabledSetting()來禁用您的ACTION_USER_PRESENT接收器。

步驟3:收到UNLOCKED後,使用PackageManagersetComponentEnabledSetting()重新啓用ACTION_USER_PRESENT接收器。

這可能會在邊緣情況下有點冒險(例如,用戶彈出電池,而LOCKED),但這是一個起點。

+0

爲什麼我需要單獨的接收器?只有一個拿起所有三個人有什麼不對? – 2012-04-28 16:36:10

+0

我的意思是,我不能只是使用類似於:if(intnet.getAction()。equals(com.teslacoilsw.widgetlocker.intent.LOCKED){do stuff} else {do other stuff' – 2012-04-28 16:38:13

+0

@PatrickMahoney:首先,我的啓用/禁用建議不能用於一個。第二,你將不得不保持你的狀態在某個地方,因爲你的進程可能會在廣播之間終止 – CommonsWare 2012-04-28 17:03:26

相關問題