0

Android 用の mono を使用してアプリを開発しており、プッシュ通知を機能させるのに苦労しています。Urban Airship を使用しています。

これまでのところ、TakeOff() と EnablePush() を呼び出すことができ、アプリは正常に登録されています。次のコードを参照してください。

 //_____________________________
 // Get the airship config class
    IntPtr ip_airshipConfigOptions = JNIEnv.FindClass("com/urbanairship/AirshipConfigOptions");

   if (ip_airshipConfigOptions == IntPtr.Zero)
   {
         throw new InvalidOperationException("Counldn't find java class !");
   }

                //__________________________________________________
                // Get the loadDefaults method from the config class
                IntPtr methodId = JNIEnv.GetStaticMethodID(ip_airshipConfigOptions, "loadDefaultOptions", "(Landroid/content/Context;)Lcom/urbanairship/AirshipConfigOptions;");

                if (methodId == IntPtr.Zero)
                {
                    throw new InvalidOperationException("Couldn't find java class !");
                }

                //________________________________________________________________
                // Call the loadDefaultOptions method passing in this app instance
                var methodPtr = JNIEnv.CallStaticObjectMethod(ip_airshipConfigOptions, methodId, new JValue(this));

                //________________________
                // Get the UAirship class
                IntPtr ip_uairship = JNIEnv.FindClass("com/urbanairship/UAirship");

                if (ip_uairship == IntPtr.Zero)
                {
                    throw new InvalidOperationException("Couldn't find java class !");
                }

                //___________________________________________
                // Get takeOff method with configoption param
                IntPtr methodId2 = JNIEnv.GetStaticMethodID(ip_uairship, "takeOff", "(Landroid/app/Application;Lcom/urbanairship/AirshipConfigOptions;)V");

                //______________________________________________
                // Get takeOff method without configoption param
                //IntPtr methodId3 = JNIEnv.GetStaticMethodID(ip_uairship, "takeOff", "(Landroid/app/Application;)V");

                //___________________________________________________________________________________________
                // Call UAirship.takeOff(this, options). Not sure if these parameters are specified correctly 
                JNIEnv.CallStaticVoidMethod(ip_uairship, methodId2, new JValue(this), new JValue(methodPtr));

                //________________________________________
                // Enable Push in Urban Airship Pushmanager     
                IntPtr ip_pushmanager = JNIEnv.FindClass("com/urbanairship/push/PushManager");
                IntPtr ip_enablePush = JNIEnv.GetStaticMethodID(ip_pushmanager, "enablePush", "()V");
                JNIEnv.CallStaticVoidMethod(ip_pushmanager, ip_enablePush);

PushManager.shared().setIntentReciever(myClass) を呼び出す必要がありますが、shared() クラスまたは setIntentReciever メソッドにアクセスできないようです。メソッドにアクセスするためにさまざまな組み合わせを試しましたが、クラス/メソッドが見つからないという例外が発生し続けます。

//IntPtr ip_setReciver = JNIEnv.GetStaticMethodID(ip_PushManager, "shared().setIntentReceiver", "(Landroid/app/Class)V");

これに関する任意の助けをいただければ幸いです! 1行で解決できると確信しています。構文に何かが欠けているだけだと思います。

よろしく

4

1 に答える 1

0

この問題を解決しました。JNI 経由で setIntentReceiver を呼び出すための以下のコードを参照してください。

//__________________________
// Get the PushManager class
IntPtr ip_Test = JNIEnv.FindClass("com/urbanairship/push/PushManager");

//_____________________
// Get the class object
IntPtr ip_class = JNIEnv.GetObjectClass(ip_Test);

//_________________________________
// Get the setIntentReciever method
IntPtr ip_setIntent = JNIEnv.GetMethodID(ip_Test, "setIntentReceiver", "(Ljava/lang/Class;)V");

//_________________________________________________
// Create a new jValue from the IntentRecieverClass
JValue val = new JValue(reciever.Class);

                //______________________________________________________________________________________
// Set the intent reciever by calling the setIntentReciever method passing in the jValue
JNIEnv.CallStaticVoidMethod(ip_class, ip_setIntent, val);
于 2012-10-03T13:01:57.107 に答える