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

2022-09-04 23:20:51

当有人点击“com.foo.bar://testtest”网页中的链接时,我希望它打开我的unity游戏,并让我获得测试测试数据。

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

我可以使用意图过滤器对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>

单击链接会成功启动我的游戏,但会进入黑屏。

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

<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>

有哪些神奇的咒语可以使整个游戏启动,以及我的自定义活动,并让我的自定义活动读取传入的URL,而无需触及主要活动?


答案 1

我想你错过了启动序列的一部分;所需步骤如下:

  1. 使用正确的方案定义协议捕手 (OK)Activity
  2. 定义主操作,它表示您的 Unity3D 游戏主(正常)Activity
  3. 协议捕获器活动启动时启动活动(缺失)

实施第三步非常容易;只需编辑您的协议捕手的方法: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

}

考虑到您正在手动“注入”ProtocolCatcher的事实,如果您在从PropertoCatcher引用MainActivity时遇到问题,则可以使用反射查找相对类ActivityonCreate()


答案 2

推荐