c# यूनिटी 3 डी कोड से एंड्रॉइड सेवा प्रारंभ करें



android unity3d (1)

एंड्रॉइड के लिए मेरे यूनिटी 3 डी एप्लीकेशन में मुझे एक सेवा शुरू करने की आवश्यकता है, जो पृष्ठभूमि में चलेगी। मैं यह नहीं समझ सकता कि मैं यह कैसे कर सकता हूं। किसी गतिविधि पर विधि startService () को लागू किया जाना है, लेकिन मुझे नहीं पता कि वर्तमान एकता गतिविधि को मेरी एंड्रॉइड प्लगइन के लिए एकता स्क्रिप्ट से कैसे पारित करना है। और मुझे स्टैटिक मेथड में गतिविधि प्राप्त करने और इसमें startService () चलाने का कोई तरीका नहीं मिला है

जहां तक ​​मैं अनुक्रम को समझता हूं, मुझे मुख्य यूनिटी 3 डी गतिविधि प्राप्त करने और उससे सेवा शुरू करने की आवश्यकता है।

मेरी कक्षा जो सेवा को कॉल करने वाला है

public final class StatusCheckStarter {

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

यह कोड काम नहीं करता है, क्योंकि "विधि startService को हल नहीं किया जा सकता" और मेरे पास इस तर्क में पास करने के लिए कुछ नहीं है। मुझे वर्तमान गतिविधि प्राप्त करने की आवश्यकता है


Activity उदाहरण / जावा प्लगइन के संदर्भ को नीचे भेजने के दो तरीके हैं जो कि UnityPlayerActivity फ़ंक्शन का उपयोग नहीं करते हैं या UnityPlayerActivity से UnityPlayerActivity

विधि 1 : Activity संदर्भ भेजें एक बार फिर इसे सामान्य रूप से जावा में एक स्थिर चर में संग्रहीत करें:

जावा :

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

सी # :

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 संदर्भ भेजें।

जावा :

public final class StatusCheckStarter {

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

सी # :

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

नोट : आपको अपने StatusCheckStarter कक्षा के पूर्ण पैकेज के साथ com.example.StatusCheckStarter को बदलना होगा।





service