Unity安卓平台开发,启动app并传参

csharp 复制代码
using UnityEngine;
using System;

public class IntentReceiver : MonoBehaviour
{
    public bool isVR1;
    void Start()
    {
        Debug.LogError("app1111111111111111111111111");
        if (isVR1)
        {
            LaunchAnotherApp("com.HappyMaster.DaKongJianVR2");
        }
        else
        {
            // 检查是否有传递的参数
            if (Application.isMobilePlatform)
            {
                AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

                AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");

                // 检查Intent是否包含额外的数据
                if (intent != null)
                {
                    // 从Intent中获取参数
                    string sn = intent.Call<string>("getStringExtra", "sn");
                    int group = intent.Call<int>("getIntExtra", "group", 0);
                    string app = intent.Call<string>("getStringExtra", "app");
                    string user = intent.Call<string>("getStringExtra", "user");
                    int human = intent.Call<int>("getIntExtra", "human", 0);
                    int times = intent.Call<int>("getIntExtra", "times", 0);

                    // 在这里处理接收到的参数
                    Debug.Log($"Received parameter: \n{sn}\n{group}\n{app}\n{user}\n{human}\n{times}");
                }
            }
        }
    }


    void LaunchAnotherApp(string packageName)
    {
        try
        {
            AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
            AndroidJavaObject pm = currentActivity.Call<AndroidJavaObject>("getPackageManager");
            AndroidJavaObject launchIntent = pm.Call<AndroidJavaObject>("getLaunchIntentForPackage", packageName);
            if (launchIntent == null)
            {
                Debug.Log("无法获取 launch intent");
                return;
            }

            // 添加需要的 extras 和 flags
            launchIntent.Call<AndroidJavaObject>("putExtra", "sn", "PicoSN");
            launchIntent.Call<AndroidJavaObject>("putExtra", "group", 99);
            launchIntent.Call<AndroidJavaObject>("putExtra", "app", "一刀九九");
            launchIntent.Call<AndroidJavaObject>("putExtra", "user", "教主");
            launchIntent.Call<AndroidJavaObject>("putExtra", "human", 0);
            launchIntent.Call<AndroidJavaObject>("putExtra", "times", 2025);

            currentActivity.Call("startActivity", launchIntent);
        }
        catch (Exception e)
        {
            Debug.LogError($"启动app失败: {e.Message}\n{e.StackTrace}");
        }
    }

}

AndroidManifest 需要添加权限

相关推荐
移动开发者1号31 分钟前
Kotlin协程超时控制:深入理解withTimeout与withTimeoutOrNull
android·kotlin
程序员JerrySUN1 小时前
RK3588 Android SDK 实战全解析 —— 架构、原理与开发关键点
android·架构
移动开发者1号1 小时前
Java Phaser:分阶段任务控制的终极武器
android·kotlin
枯萎穿心攻击7 小时前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
哲科软件10 小时前
跨平台开发的抉择:Flutter vs 原生安卓(Kotlin)的优劣对比与选型建议
android·flutter·kotlin
X_StarX15 小时前
【Unity笔记02】订阅事件-自动开门
笔记·学习·unity·游戏引擎·游戏开发·大学生
jyan_敬言16 小时前
【C++】string类(二)相关接口介绍及其使用
android·开发语言·c++·青少年编程·visual studio
程序员老刘16 小时前
Android 16开发者全解读
android·flutter·客户端
福柯柯17 小时前
Android ContentProvider的使用
android·contenprovider
不想迷路的小男孩17 小时前
Android Studio 中Palette跟Component Tree面板消失怎么恢复正常
android·ide·android studio