ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

安卓对接SDK遇到的问题及解决

2021-03-18 14:34:08  阅读:181  来源: 互联网

标签:安卓 对接 RewardAdListener AndroidJavaObject Unity new com public SDK


#### 在Unity与Android交互中可使用 AndroidJavaProxy 这个类进行交互

 

首先在android里面定义接口,在Unity中实现这个接口,并继承于AndroidJavaProxy。 然后在android中就可以以多态的形式被调用,调用之后,就会调用到C# 的代码,然后就可以实现我们想要的与Unity与Android的回调

 

例子:

在安卓定义

```java

public interface RewardAdListener {

    public void onReward(String str);

}

```

 

在Unity中实现这个接口

```csharp

public sealed class RewardAdListener : AndroidJavaProxy

{

    public RewardAdListener() : base("com.adSdk.AdTest0916.RewardAdListener")

    {

    }

    public void onReward(string str)

    {

        Debug.Log("Unity: "+str);

    }

}

```

 

安卓中开放给Unity的方法

```java

 public void LoadAwardAd(RewardAdListener listener) {

     listener.onReward("发放奖励");

 }

```

 

Unity调用安卓的方法

```csharp

    AndroidJavaObject jo = new AndroidJavaObject("com.adSdk.AdTest0916.RewardAd");

    adNative.Call("LoadAwardAd",  new RewardAdListener());

```

 

就可以了,但是还有个问题是Java回调是在子线程,当子线程调用主线程的方法时就会报错,就需要让方法在主线程执行

 

```csharp

    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

    AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

 

    AndroidJavaObject jo = new AndroidJavaObject("com.adSdk.AdTest0916.RewardAd"); // 这个jo要用之前获得的RewardAd类否则是新创建的

 

     var runnable = new AndroidJavaRunnable(() =>

        {

            Debug.Log("执行show");

            jo.Call("ShowRewardAd", activity);

        });

        activity.Call("runOnUiThread", runnable);

```

 

https://blog.csdn.net/sgnyyy/article/details/53048552

https://docs.unity3d.com/ScriptReference/AndroidJavaRunnable.html

 

标签:安卓,对接,RewardAdListener,AndroidJavaObject,Unity,new,com,public,SDK
来源: https://blog.csdn.net/weixin_41292299/article/details/114977479

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有