2016-03-25 49 views
1

在啓用Foreground Dispatch的應用程序中掃描NFC標籤時,在onNewIntent()之前調用onPause()。是否有可能已經在onPause()中獲得NFC意圖,以便我可以根據意圖的來源停止(或不)進程?NFC意圖在onNewIntent之前調用onPause - 如何知道onPause調用的來源?

由於活動位於前臺,因此當掃描標籤時不應該暫停/恢復活動,並且由於我的任務必須在/onResume中停止或啓動,因此您可以看到問題所在。

getIntent().getAction()總是「主」,但肯定必須有辦法獲得更準確的意圖描述?或者在輸入onNewIntent()之前無法知道它是NFC的意圖?

+0

粘貼您的意圖過濾器。 我想你的意圖過濾器中存在一些問題。 – Akash

+0

這不是IntentFilter的問題。 NFC的IntentFilter只能在onNewIntent()方法中讀取,並且不會在onPause()中存在。我需要的是能夠檢測onPause()是否被系統或用戶調用。 – zuokuok

+0

On Tap NFC onPause不應該被調用。 您確定您的NFC事件正在生成? – Akash

回答

3

不,您不能在onNewIntent()交付給您的活動之前知道新的意圖是什麼。這就是onNewIntent()回調的要點:將有關新意向的信息傳遞給您的活動。只有當這種方法被調用,您可以通過該方法的intent參數獲取新的意圖:

@Override 
protected void onNewIntent(Intent intent) { 
    ... 
} 

注意getIntent()總是返回最初開始的活動,除非你明確地更新使用setIntent(newintent)該意圖的意圖。因此,如果您通過啓動器啓動活動,您將獲得意圖操作MAIN。

/onResume()由於NFC服務將意圖傳遞給您的活動而被調用。對此你無能爲力。事實上,這不應該是您在應用程序邏輯中需要區分的東西。如果調用,則應該執行通常在那裏執行的任何操作,而不管這是否由於顯式用戶UI交互將您面前的某個其他UI組件移動或由於系統移動了前面的某個(不可見)UI組件而被調用你的。如果您當前的邏輯確實需要區分兩者,那麼可能最好在onStop中完成。

+0

我用onStart/onStop代替,當我注意到它們在標籤被掃描時沒有被調用。你的答案加入我的解決方案,所以我會驗證它。 – zuokuok