如何在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?
我想您 缺少引导序列的一部分 ;所需的步骤如下:
- 用适当的方案定义ProtocolCatcher
Activity
(确定)
- 定义MainActivty,代表你的Unity3D游戏主体
Activity
(OK)
- 在 ProtocolCatcher
Activity
启动时启动 MainActivity(丢失)
实现第三步超级简单;只需编辑 ProtocolCatcher Activity
的 onCreate()
方法:
//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
,如果你有问题参考MainActivity 从 ProtocolCatcher onCreate()
你可以 lookup the relative Class using reflection.
当有人点击 "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?
我想您 缺少引导序列的一部分 ;所需的步骤如下:
- 用适当的方案定义ProtocolCatcher
Activity
(确定) - 定义MainActivty,代表你的Unity3D游戏主体
Activity
(OK) - 在 ProtocolCatcher
Activity
启动时启动 MainActivity(丢失)
实现第三步超级简单;只需编辑 ProtocolCatcher Activity
的 onCreate()
方法:
//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
,如果你有问题参考MainActivity 从 ProtocolCatcher onCreate()
你可以 lookup the relative Class using reflection.