2017-09-27 61 views
2

我來自Unity3D開發的世界,我對Android開發非常陌生。我正在嘗試爲Unity Android創建一個NFC插件。我跟着由Twinsprite提供的this guide關於如何通過擴展UnityPlayerActivity來創建插件。使用Twinsrpite的代碼,這個插件可以讓Android的NFC前臺調度系統在我的應用程序處於前臺時捕獲NFC Intent。有沒有一種方法讓片段接收意向數據而不需要通過活動?

在我的研究中,我發現擴展UnityPlayerActivity是因爲它會在Unity項目的其他插件中引起很多依賴問題而引起不滿。從那裏我決定,我的插件可以擴展Fragment類,就像其他Unity Android插件一樣。這樣我的無頭版Fragment插件可以利用片段生命週期的回調而不會導致Unity中的問題。但是,在修改代碼以在Fragment上工作時,我遇到了一個問題。 Twinsprite的代碼依賴於ActivityonNewIntent回調,該回調將Intent的數據傳遞給解析NFC消息的處理程序方法。由於我正在編寫代碼以使用Fragment而不是Activity,因此我無法再訪問onNewIntent回調,因此我無法再調用處理程序方法。如上所述,我想從延長UnityPlayerActivity所以我離開了這個問題望而卻步:

如何我可以從我Fragment插件中收到我的NFC Intent數據不延長UnityPlayerActivity

+1

碎片必須託管在一個活動中。他們不是獨立的組件 – Kuffs

+0

@Kuffs目前我沒有代碼,但我使用FragmentManager類將自己的Fragment添加到UnityPlayerActivity的狀態。我通過在Unity中調用一個靜態方法來創建我的插件對象。 – Esper

回答

0

我決定去的只是延長UnityPlayerActivity不使用Fragment類的路線。 Fragment擴展插件的目的是爲了避免必須更改AndroidManifest.xml,因爲我擔心它會導致其他插件即分析,Facebook等問題。Intent s必須由Activity處理,所以我試圖要做是不可能的。

0

只需將一個方法添加到活動可以將新Intent傳遞給您的Fragment。然後片段可以根據需要處理意圖。

MyUnityFragment myUnityFragment; 

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent);  
    myUnityFragment.newIntent(intent); 
} 
+0

我試圖找到一種方法來規避在活動方面編寫任何代碼。想知道當用戶收到一個Intent時是否有一個公共事件可以訂閱,但是看起來有這樣的做法,所以我只需要對這個原創想法進行回退。謝謝。 – Esper

+0

道歉我沒意識到你不能延長活動,因爲鏈接的例子確實延長了活動時間。恐怕NFC功能與活動相關聯,請參閱:https://developer.android.com/guide/topics/connectivity/nfc/nfc.html#dispatching – jgriffin

+0

統一文檔似乎並沒有大處理關於擴展提供的活動,似乎你只需要更新清單。 https://docs.unity3d.com/Manual/AndroidUnityPlayerActivity.html – jgriffin

相關問題