#### 在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
原文地址:https://blog.csdn.net/weixin_41292299/article/details/114977479
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。