微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 从Unity3D代码启动android服务

在我的Android的Unity3D应用程序中,我需要启动一个服务,它将在后台运行.我无法弄清楚我该怎么做.必须在活动上调用方法startService(),但我不知道如何将当前的unity活动从unity脚本传递到我的android插件.我还没有找到任何方法获取静态方法中的活动并在其中运行startService().

据我了解序列,我需要获得主要的Unity3D活动并从中启动服务.

我的班级应该叫服务.

public final class StatusCheckStarter {

    public static void StartCheckerService()
    {
        startService(new Intent(this, CheckService.class));
    }
}

代码不起作用,因为“无法解析方法startService”,我没有任何东西可以传递给这个参数.我需要获得当前的活动.

解决方法:

下面是两种方法将Activity实例/引用发送到Java插件,该插件不使用onCreate函数或从UnityPlayerActivity扩展.

方法1:发送一次Activity引用然后将它存储在Java中的静态变量中以供常用:

Java的:

public final class StatusCheckStarter {

    static Activity myActivity;

    // Called From C# to get the Activity Instance
    public static void receiveActivityInstance(Activity tempActivity) {
        myActivity = tempActivity;
    }

    public static void StartCheckerService() {
        myActivity.startService(new Intent(myActivity, CheckService.class));
    }
}

C#:

AndroidJavaClass unityClass;
AndroidJavaObject unityActivity;
AndroidJavaClass customClass;

void Start()
{
    //Replace with your full package name
    sendActivityReference("com.example.StatusCheckStarter");

   //Now, start service
   startService();
}

void sendActivityReference(string packageName)
{
    unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
    customClass = new AndroidJavaClass(packageName);
    customClass.CallStatic("receiveActivityInstance", unityActivity);
}

void startService()
{
    customClass.CallStatic("StartCheckerService");
}

方法2:在每个函数调用中发送活动引用.

Java的:

public final class StatusCheckStarter {

    public static void StartCheckerService(Activity tempActivity) {
        tempActivity.startService(new Intent(tempActivity, CheckService.class));
    }
}

C#:

void Start()
{
    //Replace with your full package name
    startService("com.example.StatusCheckStarter");
}

void startService(string packageName)
{
    AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass customClass = new AndroidJavaClass(packageName);
    customClass.CallStatic("StartCheckerService", unityActivity);
}

注意:您必须将com.example.StatusCheckStarter替换为StatusCheckStarter类的完整包.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐