有没有办法让 Fragment 无需通过 Activity 即可接收 Intent 数据?

Is there a way for a Fragment to receive Intent data without going through an Activity?

我来自 Unity3D 开发领域,对 Android 开发还很陌生。我正在尝试为 Unity Android 创建一个 NFC 插件。我按照 Twinsprite 提供的 this guide,了解如何通过扩展 UnityPlayerActivity 创建插件。使用 Twinsrpite 的代码,该插件启用 Android 的 NFC 前台调度系统,以便在我的应用程序处于前台时捕获 NFC Intent。

在我的研究中,我发现扩展 UnityPlayerActivity 是不受欢迎的,因为它会导致 Unity 项目中其他插件的依赖性出现很多问题。从那里我决定让我的插件像许多其他 Unity Android 插件一样扩展 Fragment class。这样我的无头 Fragment 插件就可以利用片段生命周期的回调,而不会在 Unity 中引起问题。

我 运行 在修改代码以在 Fragment 上工作时遇到了问题。 Twinsprite 的代码依赖于 ActivityonNewIntent 回调,然后将 Intent 的数据传递到解析 NFC 消息的处理程序方法中。由于我正在编写代码以使用 Fragment 而不是 Activity,因此我无法再访问 onNewIntent 回调,因此我无法再调用处理程序方法。如上所述,我不想扩展 UnityPlayerActivity 所以我留下了这个问题:

如何在不扩展 UnityPlayerActivity 的情况下从我的 Fragment 插件中接收来自我的 NFC Intent 的数据?

只需向您的 Fragment 添加一个方法,activity 就可以将新 Intent 传递给该方法。然后片段可以根据需要处理意图。

MyUnityFragment myUnityFragment;

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

我决定走只扩展 UnityPlayerActivity 而不使用 Fragment class 的路线。 Fragment 扩展插件的目的是避免必须更改 AndroidManifest.xml 因为我担心它会导致其他插件出现问题,即分析、Facebook 等。Intents 必须由 Activity 处理,所以我试图做的事情是不可能的。