c# - Unity Android Intent

标签 c# android unity3d 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;结束

当我点击网站上的这个链接时,它会将应用程序启动到我想要的状态(具体来说,它会启动 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>

这似乎是链接正在运行的 Activity 。

我的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);

这会成功打开应用程序,但是游戏 (id 370731277)

我觉得我在这里拥有我需要的一切,我只是不明白某些事情 - 任何帮助将不胜感激!

最佳答案

最终修复它 - 基本上通过反复试验,我发现我必须非常具体地了解我想要运行的 Activity 。我必须告诉它 Activity 、 Action 和方案+数据。这是我的新工作代码。

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

关于c# - Unity Android Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51460822/

相关文章:

c# - 当类不是 MonoBehaviour 时启动协程

c# - 如何检测 Unity 中发生碰撞的位置?

c# - 如何设置测试TCP连接超时?

c# - 如何将通用列表<匿名类型>转换为通用列表<类名>?

c# - 下拉菜单中的回发或回调参数无效

android - 如何在 Android 应用程序上以编程方式打开 GPS

Android JNI APK 打包

c# - 在 WorldSpace 中沿 2 个轴移动相机

android - Recyclerview 在嵌套 ScrollView 中无限滚动,触发 onScrolled

c# - 在 C# 中通过串口访问蓝牙数据