如何在团结游戏中使用非主要活动来捕获自定义网址?

ten*_*npn 12 java android uri unity-game-engine android-intent

当有人点击"com.foo.bar://testtest"表单的网页中的链接时,我希望它打开我的统一游戏并让我获取测试数据.

我是一名经验丰富的程序员,但是当涉及到android时,我有点谷歌而不是真正理解任何东西.记住这一点.:)

我可以使用intent-filters对android上的链接做出反应.但是,我发现的所有资源都假设您可以扩展主要活动以捕获新意图.团结可以做到这一点,但出于各种原因,我宁愿不这样做.我尝试创建一个新活动,将其导出到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>
Run Code Online (Sandbox Code Playgroud)

点击链接成功启动了我的游戏,但是在黑屏上.

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

<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>
Run Code Online (Sandbox Code Playgroud)

使整个游戏启动以及我的自定义活动有什么神奇的咒语,让我的自定义活动读取传入的URL,而不触及主要活动?

bon*_*nyz 3

我想您缺少启动顺序的一部分;所需步骤如下:

  1. 使用正确的方案定义ProtocolCatcher (确定)Activity
  2. 定义MainActivty,它代表您的Unity3D游戏主Activity(OK)
  3. ProtocolCatcher启动时启动MainActivity (缺失) Activity

实施第三步非常简单;只需编辑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

}
Run Code Online (Sandbox Code Playgroud)

考虑到您手动“注入” ProtocolCatcher 的 事实,如果您在从ProtocolCatcherActivity引用MainActivity时遇到问题,您可以使用 Reflection 查找相关类 onCreate()