O Unity chama o pacote jar ou o pacote aar

Eu tenho feito conferências em nuvem VR recentemente e usei o serviço de conferência em nuvem Huawei. O serviço de conferência em nuvem Huawei não fornece o SDK da versão Unity, mas o SDK nativo da versão Android, então só posso encapsular uma camada no Unity para chamar a interface Android. No processo, alguns problemas foram encontrados, então vamos fazer um resumo.

1. Obtenha o aplicativo atual ou a atividade atual

            using AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            using AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
            using AndroidJavaObject app = currentActivity.Call<AndroidJavaObject>("getApplication");

2. A função da biblioteca Android retorna ArrayList, como converter em c#? Geralmente, primeiro retorne AndroidJavaObject, depois converta ArrayList para AndroidJavaObject[] e, finalmente, percorra o loop em C# para converter cada unidade na matriz em sua própria estrutura.

        public static AttendeeInfo ToAttendeeInfo(AndroidJavaObject attendeeObject)
        {
            AttendeeInfo attendeeInfo = new AttendeeInfo();

            attendeeInfo.setName(attendeeObject.Call<string>("getName"));
        }

        public List<AttendeeInfo> GetVideoAttendeeList()
        {
            using AndroidJavaObject attendeeListObj = IConfState.Call<AndroidJavaObject>("getVideoAttendeeList");
            if (attendeeListObj == null)
                return null;


            AndroidJavaObject[] objArray = attendeeListObj.Call<AndroidJavaObject[]>("toArray");

            List<AttendeeInfo> attendeeInfos = new List<AttendeeInfo>();
            foreach (var obj in objArray)
            {
                attendeeInfos.Add(AttendeeInfo.ToAttendeeInfo(obj));
            }

            return attendeeInfos;
        }

3. Na interface do Android existem parâmetros ArrayList nos parâmetros, como fazer?

Primeiro salve o AndroidJavaObject do ArrayList, depois converta cada item de C# em cada item da matriz de interface do Android e chame a interface add para adicioná-lo um por um.

        public SDKERR GeneralWatch(List<GeneralWatchItemParamEx> watchs)
        {
            using AndroidJavaObject watchList = new AndroidJavaObject("java.util.ArrayList");
            foreach (var watch in watchs)
            {
                watchList.Call<bool>("add", watch.ToXRAndroidJavaObject());
            }

            return SDKERR.ToSDKERR(IConfCtrl.Call<AndroidJavaObject>("generalWatch", watchList));
        }

4. Existe uma função callback nos parâmetros Como passar parâmetros em C#?

Existe uma classe em C# que especifica a herança do AndroidJavaProxy. Deve-se notar que a interface de retorno de chamada só pode ser a interface Interface no Android, e então javaInterface é o caminho do android. Além disso, todas as funções na interface de retorno de chamada devem ser implementadas. O tipo básico pode ser correspondido diretamente. Se for outras estruturas, AndroidJavaObject deve ser usado.

    public class SdkCallback: AndroidJavaProxy
    {
        public readonly static string DEFALUT_JAVAINTERFACE = "com.huawei.hwmsdk.common.SdkCallback";
        public event Action<AndroidJavaObject> OnSuccess;
        public event Action OnFailed;

        public SdkCallback(string javaInterface) : base(javaInterface)
        {
        }

        public SdkCallback() : base(DEFALUT_JAVAINTERFACE)
        {
        }

        public void onFailed(AndroidJavaObject sdkerr)
        {
            SDKERR sDKERR = SDKERR.ToSDKERR(sdkerr);
            Debug.LogError("SdkCallback onFailed: " + sDKERR.ToString());

            OnFailed?.Invoke();
        }

        public void onSuccess(AndroidJavaObject var1)
        {
            OnSuccess?.Invoke(var1);
        }
    }

5. Como chamar o tipo enum na interface do Android?

AndroidJavaClass statuCodeClass = new AndroidJavaClass("com.huawei.huaweicloud.xrmeeting.rpc.core.RpcStatusCode");
AndroidJavaObject statusCode = statuCodeClass.GetStatic<AndroidJavaObject>("OK");

Acho que você gosta

Origin blog.csdn.net/grace_yi/article/details/122668978
Recomendado
Clasificación