如何在unity游戏中使用non-main activity来捕获custom url?

How to use non-main activity to capture custom url in unity game?

当有人点击 "com.foo.bar://testtest" 形式的网页中的 link 时,我希望它打开我的 unity 游戏并让我获取测试数据。

我是一名经验丰富的程序员,但在谈到 android 时,我有点 google 我的方式,而不是真正理解任何东西。请记住这一点。 :)

我可以使用 intent-filters 对 android 上的 link 做出反应。然而,我发现的所有资源都假设您可以扩展您的 main activity 来捕捉新的意图。可以通过团结来做到这一点,但出于各种原因我宁愿不这样做。我尝试创建一个新的 activity,将其导出到 jar,并将其添加到应用程序标签中的清单:

<activity android:name="com.foo.ProtocolCatcher"
          android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <intent-filter>
        <data android:scheme="com.foo.bar" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
    </intent-filter>
</activity>

点击 link 成功启动我的游戏,但出现黑屏。

编辑:我也试过这种格式没有改变:

<activity android:name="com.foo.ProtocolCatcher"
          android:label="@string/app_name">
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="com.foo.bar" />
  </intent-filter>
</activity>

有什么魔法可以让整个游戏连同我的自定义 activity 一起启动,并让我的自定义 activity 读取传入的 URL,而无需触及主 activity?

我想您 缺少引导序列的一部分 ;所需的步骤如下:

  1. 用适当的方案定义ProtocolCatcherActivity(确定)
  2. 定义MainActivty,代表你的Unity3D游戏主体Activity(OK)
  3. ProtocolCatcher Activity 启动时启动 MainActivity(丢失)

实现第三步超级简单;只需编辑 ProtocolCatcher ActivityonCreate() 方法:

//ProtocolCatcher
//...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //...

    Intent gameIntent = new Intent(this, MainActivity.class);
    /*
        //Pass the extra data to the game if needed
        Intent sourceIntent = getIntent();
        Uri data = sourceIntent.getData();
        gameIntent.putExtra("uriData", data != null ? data.toString(): null); 
    */
    startActivity(gameIntent); //start the real game
    finish(); //close the ProtocolCatcher activity

}

考虑到你是"injecting"手动ProtocolCatcherActivity,如果你有问题参考MainActivityProtocolCatcher onCreate() 你可以 lookup the relative Class using reflection.