我對前臺調度行爲有一個討厭的問題。有時候不是調用onNewIntent()
,而是完全重新創建活動,這會打破應用程序的工作流程。Android的NFC前臺調度系統是否有bug?
我的具體情況:活動A是MainActivity,它使用前臺調度。一切正常。但是,在從瀏覽器(VIEW操作)啓動的我的活動B中,在某些情況下,前臺調度不再有效。
的工作流程:
我開始在MainActivity,切換到瀏覽器(不關閉 在MainActivity),發射活動B和附上我的NFC設備 - >它 創建一個新的活動B.
我啓動MainActivity並再次關閉它。從那以後,我切換
到瀏覽器,發射活動B和附上我的NFC設備 - > 一切工作與onNewIntent()
的代碼是正確的,例如如果我在第一個場景中連接NFC設備兩次,它將在第二次應用時運行,但不是在第一次。在MainActivity和Activity B中,我明確地調用activity的onPause()方法中的disableForegroundDispatch()方法。
有沒有解決我的特定問題的方法?對我來說,這聽起來像一個錯誤。
編輯:
public void resume(Activity targetActivity) {
if (nfc != null && nfc.isEnabled()) {
// nfc is the default NFC adapter and never null on my devices
Intent intent = new Intent(targetActivity, targetActivity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(targetActivity, 0, intent, 0);
nfc.enableForegroundDispatch(targetActivity, pendingIntent, null, new String[][] { new String[] { IsoDep.class.getName() } });
}
}
public void pause(Activity targetActivity) {
if (nfc != null && nfc.isEnabled()) {
nfc.disableForegroundDispatch(targetActivity);
}
}
這些方法稱爲在每個活動的相應方法。謝謝您的幫助!
解決方案:經過很長時間的研究,我終於找到了問題。 Logcat打印:
- startActivity從非活動上下文中調用;迫使Intent.FLAG_ACTIVITY_NEW_TASK爲:意向
我發現其他問題,在#2,那裏的人有過與NotificationManager同樣的問題,但所有的暗示並沒有幫助我。將標誌singleTask添加到我的活動B中對我來說是個竅門,但說實話我不明白,因爲上下文總是一個活動。
我刪除了MainActivity中的所有代碼,第一個方案仍然無法工作。我從清單中挑選了MainActivity,之後一切都很好。也許這是一個問題,應用程序實例正在運行,並且活動B從瀏覽器啓動?我不知道。
無論如何,感謝幫助NFC的人!
請顯示您創建的PendingIntent代碼。 – 2012-04-23 11:01:28
我已經添加了。提前致謝。 – vRallev 2012-04-23 11:32:48
我遇到了同樣的問題...我解決了你使用SingleTask方法。我對解決方案也不是很滿意。你有沒有找到另一種解決方法? – david 2013-02-20 13:33:52