【问题标题】:Is there a way for a Fragment to receive Intent data without going through an Activity?Fragment 有没有办法在不通过 Activity 的情况下接收 Intent 数据?
【发布时间】:2017-09-27 07:40:34
【问题描述】:

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

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

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

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

【问题讨论】:

  • 片段必须托管在 Activity 中。它们不是独立的组件
  • @Kuffs 我现在没有代码,但我让我的片段通过使用FragmentManager 类将自己添加到UnityPlayerActivity 的状态。我通过在 Unity 中调用静态方法来创建我的插件对象来做到这一点。

标签: android android-fragments unity3d android-intent nfc


【解决方案1】:

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

MyUnityFragment myUnityFragment;

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

【讨论】:

  • 我试图找到一种方法来规避在 Activity 端编写任何代码。想知道当用户收到 Intent 时是否有一个可以订阅的公共事件,但看起来有这样的方法,所以我只需要回退到这个最初的想法。谢谢。
  • 抱歉,我没有意识到您无法扩展活动,因为链接的示例确实扩展了活动。恐怕 NFC 功能与活动相关联,请参阅:developer.android.com/guide/topics/connectivity/nfc/…
  • 统一文档似乎对扩展提供的活动没有什么大不了的,似乎您只需要更新清单。 docs.unity3d.com/Manual/AndroidUnityPlayerActivity.html
  • 远离扩展 UnityPlayerActivity 的想法来自 this tutorial 的作者对 Unity Android 插件的警告。看起来我最终可能不得不遵循 Unity 文档。根据您的经验,您是否发现扩展 UnityPlayerActivity 并在稍后集成其他插件时遇到任何问题,例如Facebook、Vuforia 等?
  • 我无法提供更多帮助,因为我没有任何从 UnityPlayerActivity 扩展的经验。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-08-18
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多