c# - activity - unity c++ plugin
Inicie el servicio de Android desde el código de Unity3D (1)
A continuación se incluyen dos formas de enviar una instancia / referencia de actividad al complemento de Java que no utiliza la función onCreate
ni se extiende desde UnityPlayerActivity
.
Método 1 : Enviar referencia de Activity
una vez y luego almacenarla en una variable estática en Java para volver a utilizarla:
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
.
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 () debe invocarse en una actividad, pero no sé cómo pasar la actividad de unidad actual de la secuencia de comandos de unidad a mi complemento de Android. Y no he encontrado ninguna forma de obtener la actividad en un método estático y ejecutar startService () en ella.
Por lo que entiendo de la secuencia, necesito obtener la actividad principal de Unity3D y comenzar el servicio desde allí.
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.