在我的 Unity3D android 应用程序中,我需要启动一个服务,它将在后台运行。我不知道我该怎么做。方法 startService() 必须在 Activity 上调用,但我不知道如何将当前的统一 Activity 从统一脚本传递到我的 android 插件。而且我还没有找到任何方法来获取静态方法中的 Activity 并在其中运行 startService()。
据我所知,我需要获取主要的 Unity3D Activity 并从中启动服务。
我的类应该调用该服务。
public final class StatusCheckStarter {
public static void StartCheckerService()
{
startService(new Intent(this, CheckService.class));
}
}
此代码不起作用,因为“无法解析方法 startService”并且我没有任何内容可以传递给 this 参数。我需要获取当前 Activity 。
最佳答案
以下是将 Activity
实例/引用发送到 不 使用 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:在每个 函数调用中发送Activity
引用。
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
类的完整包。
关于c# - 从Unity3D代码启动android服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38368762/