Cómo usar JS para llamar directamente a métodos Java en la plataforma Android
En el método callStaticMethod, al pasar el nombre de la clase Java, el nombre del método, la firma del método y los parámetros, puede llamar directamente al método estático de Java y obtener el valor de retorno de Java. método. Los nombres de clases y firmas de métodos que se describen a continuación pueden ser un poco extraños, pero así es como funciona la especificación de Java.
(1) Nombre de clase
El nombre de clase en el parámetro debe ser el nombre de clase completo, incluida la ruta del paquete Java, por ejemplo, si escribió una clase en org.cocos2dx .Paquete JavaScript Clase de prueba:
El nombre completo de la clase de prueba debe ser org/cocos2dx.jpg.cocos2dx/javascript/Test. Tenga en cuenta que debe ser una barra diagonal /, no el punto que suele ser. utilizado en código Java.
(2) Nombre del método
El nombre del método es el nombre simple del método. Por ejemplo, el nombre del método de suma es suma.
(3) Firma del método
La firma del método es un poco más complicada. p>La firma del método es un poco más complicada. La firma del método más simple es ()V, que representa un método sin parámetros ni valor de retorno. Hay algunos ejemplos:
(I)V representa un método con un parámetro int y sin valor de retorno
(I)I representa un método con un parámetro int y un int A; método que devuelve un valor;
(IF)Z representa un método con un int y un parámetro flotante y un valor de retorno booleano;
Ahora todos tienen una cierta comprensión de los paréntesis. Los símbolos dentro representan tipos de parámetros y los símbolos después de los paréntesis representan tipos de valores de retorno. Dado que Java permite la sobrecarga de funciones, puede haber varios métodos con el mismo nombre de método pero diferentes valores de retorno de parámetros, y se utilizan firmas de métodos para ayudar a distinguir estos métodos con el mismo nombre.
(4) Parámetros
Los parámetros pueden ser cero o cualquier número, solo use números, bool y cadenas en js.
(5) Ejemplo de uso
El método estático en la clase de prueba anterior se llamará:
// llamar al método hola
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test",?"hola",?"(Ljava/lang/String)V","este es un mensaje de js");
// Llama al primer método de suma
var?result?=?jsb.collection.callStaticMethod("org/cocos2dx/javascript/Test",?"sum",?"(II)I",? 3,?7);
cc.log(result);?//10
// Llamar al segundo método de suma
var?result ?= ?jsb.collection.callStaticMethod("org/cocos2dx/javascript/Test", ?"" suma", ?3" (I)I", ?3);
cc.log(resultado); ?//5
(6) Notas
Otra cosa a tener en cuenta es que en las aplicaciones de Android, la representación de cocos y la lógica js se completan en el hilo gl, y el propio Android actualiza la interfaz de usuario. en el hilo de la interfaz de usuario de la aplicación, por lo que si la llamada a js en el método Java tiene alguna operación para actualizar la interfaz de usuario, debe completarse en el hilo de la interfaz de usuario
Por ejemplo, en. En el siguiente ejemplo, se llamará a un método Java para que aparezca un cuadro de diálogo de alerta de Android.
// Agrega algo a la familiar clase AppActivity
public?class?AppActivity?extends?Cocos2dxActivity?{
private?strategic?AppActivity app?= ?null;
@Override
public?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
p >app?=?this;
}
public?{
// Asegúrate de usar runOnUiThread aquí
app.runOnUiThread(new?Runnable()?{
@Override
public?void?run()?setIcon(R.drawable.icon);
alertDialog.show();
}
});
}
}
}
}
Llamar a js
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity",? "showAlertDialog",?"( Ljava/ lang/String;Ljava/lang/String;)V",? "title",? "hahahahha");
Esta llamada generará un cuadro de diálogo de alerta nativo de Android.