Enviar un parámetro android.content.Context a una función con JNI

Estoy tratando de crear un método que comprueba la conexión a Internet que necesita un parámetro de contexto. El JNIHelper me permite llamar a funciones estáticas con parámetros, pero no sé cómo "recuperar" Cocos2d-x clase de actividad para utilizarlo como un parámetro.

public static boolean isNetworkAvailable(Context context) { boolean haveConnectedWifi = false; boolean haveConnectedMobile = false; ConnectivityManager cm = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE); NetworkInfo[] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo ni : netInfo) { if (ni.getTypeName().equalsIgnoreCase("WIFI")) if (ni.isConnected()) haveConnectedWifi = true; if (ni.getTypeName().equalsIgnoreCase("MOBILE")) if (ni.isConnected()) haveConnectedMobile = true; } return haveConnectedWifi || haveConnectedMobile; } 

Y el código c ++ es

 JniMethodInfo methodInfo; if ( !JniHelper::getStaticMethodInfo( methodInfo, "my/app/TestApp", "isNetworkAvailable", "(Landroid/content/Context;)Z")) { //error return; } CCLog( "Method found and loaded!"); methodInfo.env->CallStaticBooleanMethod( methodInfo.classID, methodInfo.methodID); methodInfo.env->DeleteLocalRef( methodInfo.classID); 

3 Solutions collect form web for “Enviar un parámetro android.content.Context a una función con JNI”

Cocos2dxActivity.java: Añade esta línea a Cocos2dxActivity: private static Activity me = null; Quite esta línea de onCreate:

 Cocos2dxActivity.context = getApplicationContext(); 

En su lugar poner: me = this;

utilizar :

 (ConnectivityManager) me.getSystemService( Context.CONNECTIVITY_SERVICE); 

Ahora no necesitas pasar el contexto de tu Jni … Sé que esta no es la solución, pero para tu caso no tienes que preocuparte por el contexto de Jni .. Simplemente puedes hacer tu trabajo.

Espero que esto ayude .. Utilicé esta manera para enviar correo desde android en mi juego. 🙂

Puede pasar el objeto Contexto a JNI utilizando el siguiente método:

 extern "C" { JNIEXPORT jboolean JNICALL Java_yournamespace_yourclassname_methodname( JNIEnv* env, jobject thiz, jobject p_context); } 

En su clase java utilice la siguiente declaración:

 public native static boolean methodname(Context p_context); 

Ahora puede llamar a la función nativa de su código java y pasar un contexto a un parámetro.

Como para obtener su clase de aplicación y utilizarlo, yo usaría el siguiente código (en la parte de C ++):

 jclass yourAppClass = env->FindClass("my/app/TestApp"); jmethodID someMethodId = env->GetStaticMethodID(yourAppClass , "methodName", "(Landroid/content/Context;)Z"); jboolean retval = env->CallStaticObjectMethod(yourAppClass , someMethodId , p_context); 

El primer error que veo es que usted está intentando conseguir el método incorrectamente.

"(android/content/Context;)V" significa que está solicitando un método que recibe Context como parámetro y devuelve void que no es su caso.

Su llamada debe ser algo como esto:

 jclass aClass = env->FindClass("my/app/TestApp"); env->GetMethodID(aClass, "isNetworkAvailable", "(android/content/Context;)Z"); 

No estoy completamente seguro de cómo pasar un Context a JNI sin romper las cosas o estar seguro de que funcionará. Pero en lugar de pasarlo, puede llamar a getApplication() y usarlo como un Context .

  • JNI_OnLoad devolvió la versión incorrecta (-1)
  • No se encontró ninguna implementación para Native UnsatisfiedLinkError Exception Android JNI
  • Utilizar bibliotecas jni de 32 bits en android de 64 bits
  • Camino de directorio de DCIM en Android - Valor de retorno
  • ¿Cómo importar correctamente una biblioteca de Android con código JNI?
  • Androide applicatin no puede encontrar la biblioteca jni cuando se instala como aplicación del sistema
  • Comprimir vídeos utilizando FFMPEG y JNI
  • Libusb_open_device_with_vid_pid falló al intentar acceder al dispositivo USB
  • Declaración implícita incompatible de la función incorporada Advertencia Uso de NDK con LAME
  • Creación de un archivo de encabezado para la clase de actividad de Android
  • Vinculación de bibliotecas de terceros (libs.a) con NDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.