Iniciar el servicio android desde el código Unity3D

En mi aplicación Unity3D para Android necesito iniciar un servicio, que se ejecutará en segundo plano. No puedo entender cómo puedo hacerlo. El método startService () tiene que ser invocado en una actividad, pero no sé cómo pasar la actividad de unidad actual de script de unidad a mi complemento android. Y no he encontrado ninguna manera de obtener la actividad en un método estático y ejecutar startService () en él.

Por lo que entiendo la secuencia, necesito obtener la actividad principal de Unity3D y comenzar el servicio de ella.

Mi clase que se supone que debe llamar al servicio.

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

Este código no funciona, porque "No se puede resolver el método startService" y no tengo nada que pasar en este argumento. Necesito obtener la actividad actual.

A continuación se presentan dos formas de enviar instancia / referencia de la actividad al complemento de Java que no utiliza la función onCreate ni se extiende desde UnityPlayerActivity .

Método 1 : Enviar una referencia de Activity una vez y almacenarla en una variable estática en Java para volver a ser habitual:

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"); } 

Método 2 : Enviar referencia de Activity en cada llamada de función.

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); } 

Nota : Debe reemplazar com.example.StatusCheckStarter con el paquete completo de su clase StatusCheckStarter .

  • La velocidad de fotogramas de Unity3D se redujo después de importar el modelo de Blender
  • Error de Play Store "Subiste un APK firmado con un certificado inseguro"
  • Thread priority security exception Asegúrese de que el apk está firmado
  • Invocación del servicio de facturación en la aplicación sin establecer un paquete de destino para la intención
  • ¿Se puede utilizar Android Studio para crear JARs compatibles con Unity-plugin de proyectos de Biblioteca?
  • Unity3D - Reproducción de audio que se silencia después de recibir cualquier llamada / notificación en Android
  • En la aplicación Unity android, cómo recibir contenido de un servicio de una biblioteca de android con referencia
  • Detectar si otro jugador salió involuntariamente (por ejemplo, desconexión de Internet) y volver a conectar - Google play en tiempo real multijugador
  • Unity exporta proyecto androide con problema de Facebook SDK
  • ¿Es práctico iniciar un juego de Unity desde una aplicación de Android y volver de Unity a la aplicación?
  • Error: No se puede crear FMOD :: Instancia de sonido para recurso sharedassets0.resource al dividir el binario de la aplicación en Unity
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.