Ben*_*ker 3 c# android unity-game-engine android-intent android-activity
我正在尝试使用 Unity 中的 Intents 启动 Android 应用程序。使用我编写的代码,我可以打开该应用程序,但我试图使其启动到该应用程序内的特定操作中。
我在网站上找到了一个可以满足我要求的链接,但其格式不正确,如下所示:
intent://placeID=370731277#Intent;scheme=robloxmobile;package=com.roblox.client;S.browser_fallback_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.roblox.client;end
当我点击网站上的此链接时,它会将应用程序启动到我想要的状态(具体来说,它会启动 ID 为 370731277 的游戏)
我查看了 AndroidManifest.xml 并发现了这一点:
<activity android:name="com.roblox.client.ActivityProtocolLaunch" android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="robloxmobile" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
这似乎是链接正在运行的活动。
我的Unity代码(C#)如下
string data = "robloxmobile://placeID=370731277";
string package = "com.roblox.client";
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager");
AndroidJavaObject launchIntent = packageManager.Call<AndroidJavaObject>("getLaunchIntentForPackage", package);
AndroidJavaObject uriData = uriClass.CallStatic<AndroidJavaObject>("parse", data);
launchIntent = launchIntent.Call<AndroidJavaObject>("setData", uriData);
currentActivity.Call("startActivity", launchIntent);
Run Code Online (Sandbox Code Playgroud)
这成功打开了应用程序,但是游戏(id 370731277)
我觉得我在这里拥有我需要的一切,我只是不明白一些东西 - 任何帮助将非常感激!
最终修复了它 - 本质上是通过反复试验,我发现我必须非常具体地了解我想要运行的活动。我必须告诉它活动、行动和方案+数据。这是我的新工作代码。
string url = "robloxmobile://placeID=370731277";
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager");
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject uriData = uriClass.CallStatic<AndroidJavaObject>("parse", url);
AndroidJavaObject i = packageManager.Call<AndroidJavaObject>("getLaunchIntentForPackage", "com.roblox.client");
i.Call<AndroidJavaObject>("setClassName", "com.roblox.client", "com.roblox.client.ActivityProtocolLaunch");
i.Call<AndroidJavaObject>("setAction", "android.intent.action.VIEW");
i.Call<AndroidJavaObject>("setData", uriData);
currentActivity.Call("startActivity", i);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7459 次 |
| 最近记录: |