Sam*_*one 8 c# service plugins android unity-game-engine
在我的android的Unity3D应用程序中,我需要启动一个服务,它将在后台运行.我无法弄清楚我该怎么做.必须在活动上调用方法startService(),但我不知道如何将当前的unity活动从unity脚本传递到我的android插件.我还没有找到任何方法来获取静态方法中的活动并在其中运行startService().
据我了解序列,我需要获得主要的Unity3D活动并从中启动服务.
我的班级应该叫服务.
public final class StatusCheckStarter {
public static void StartCheckerService()
{
startService(new Intent(this, CheckService.class));
}
}
Run Code Online (Sandbox Code Playgroud)
此代码不起作用,因为"无法解析方法startService",我没有任何东西可以传递给这个参数.我需要获得当前的活动.
下面是两种方法将Activity实例/引用发送到不使用该onCreate函数或从中扩展的Java插件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));
}
}
Run Code Online (Sandbox Code Playgroud)
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");
}
Run Code Online (Sandbox Code Playgroud)
方法2:Activity在每个函数调用中发送引用.
Java:
public final class StatusCheckStarter {
public static void StartCheckerService(Activity tempActivity) {
tempActivity.startService(new Intent(tempActivity, CheckService.class));
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
注意:您必须com.example.StatusCheckStarter使用StatusCheckStarter课程的完整包替换.
| 归档时间: |
|
| 查看次数: |
8864 次 |
| 最近记录: |