与安卓接口对接时,常使用UnityPlayer.UnitySendMessage给 Unity 发送一些消息。如果 App 进入后台,安卓端代码即使正常执行,Unity 方法也不会被调用。

问题描述

当应用进入后台一段时间后,即使安卓端 Java 代码正常执行,但其调用的UnityPlayer.UnitySendMessage方法却无任何效果。

解决方法

不再使用UnitySendMessage,转而使用实现安卓接口的方式回调 C# 代码。

举个例子,JAVA 端声明如下接口:

public interface IAzimiaoTest {
    public void AzimiaoFun1();
}

Unity C# 实现该接口:

public class AzimiaoTestCsharp : AndroidJavaProxy
{
    public AzimiaoTestCsharp():base("com.azimiao.IAzimiaoTest")
    {

    }

    public void AzimiaoFun1(){
        Debug.Log("[azimiaofun1]this is a c# unity output");
    }
}

之后 new 一个AzimiaoTestCsharp对象,通过约定好的方法传递给 Java 端:

var a = new AzimiaoTestCsharp();
androidObj.Call("regInterface", a);

安卓 Java 端保存一份参数引用后,可以把它当作 IAzimiaoTest 的接口实现,直接使用。

//something happen
a.AzimiaoFun1();

经过测试,这种接口调用的方式可以保证 APP 处于后台时依旧能调起 C# 代码。

梓喵出没博客(azimiao.com)版权所有,转载请注明链接:https://www.azimiao.com/7931.html
欢迎加入梓喵出没博客交流群:313732000

我来吐槽

*

*