數(shù)據(jù)類型簽名對照表: jobject Ljava/lang/Object; jclass Ljava/lang/Class; jstring Ljava/lang/String; jthrowable Ljava/lang/Throwable; jobjectArray [Ljava/lang/Object; jarray [jbooleanArray [Z jbyteArray [B jcharArray [C jshortArray [S jintArray [I jlongArray [J jfloatArray [F jdoubleArray [D Primitive?Types jboolean Z jbyte B jchar C jshort S jint I jlong J jfloat F jdouble D void V Custom?type L;
JAVA中的String
String是一個類,在JAVA中非常常用,和C++交互也很常用.QT封裝了他,只需要調(diào)用:
QAndroidJniObject::fromString("字符串");
返回一個String對象,使用的時候JNI識別jstring,需要強制轉(zhuǎn)換:
對象.object());??轉(zhuǎn)換成jstringQtAndroid::androidActivity()?? QtAndroid::androidActivity()?返回當(dāng)前安卓層的Activity對象。
調(diào)用動態(tài)對象的動態(tài)方法:
對象.callMethod("方法名","參數(shù)類型簽名",參數(shù))例子:調(diào)用安卓窗口中封裝的Toask函數(shù)。
//JAVA層
public?class?QtActivity?extends?Activity
{
....
...
..
void??QMessage(String?s)
????{
????????Toast??toast?=??Toast.makeText(this,?s,?500);
????????toast.show();
????}
}//C++調(diào)用
?void?MyJni::QMessage(QString?s)
?{
?????QtAndroid::runOnAndroidThread([=](){
?????????QAndroidJniEnvironment???EV;
??????????QAndroidJniObject?activity?=QtAndroid::androidActivity();
?????????QAndroidJniObject?str?=QAndroidJniObject::fromString(s);
??????????activity.callMethod("QMessage","(Ljava/lang/String;)V",str.object());
??????????qDebug()<<"WAIT*****END";
?????});
?}或使用靜態(tài)方法獲取java對象,然后調(diào)用之:
c++:
?void?MyJni::QMessage(QString?s)
?{
?????QtAndroid::runOnAndroidThread([=](){?
?????????QAndroidJniEnvironment???EV;
?????????QAndroidJniObject?str?=QAndroidJniObject::fromString(s);
??????????QAndroidJniObject?selfobj?=?QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/bindings/QtActivity",?"getobj");
??????????selfobj.callMethod("QMessage","(Ljava/lang/String;)V",str.object());
?????});
?}
JAVA:
?public?static?QtActivity?selfObj?=null;
????public?QtActivity()
????{
????????selfObj?=?this;
????????m_loader?=?new?QtActivityLoader(this);
????????if?(Build.VERSION.SDK_INT?>=?21)?{
????????????QT_ANDROID_THEMES?=?new?String[]?{"Theme_Holo_Light"};
????????????QT_ANDROID_DEFAULT_THEME?=?"Theme_Holo_Light";
????????}?else?{
????????????QT_ANDROID_THEMES?=?new?String[]?{"Theme_DeviceDefault_Light"};
????????????QT_ANDROID_DEFAULT_THEME?=?"Theme_DeviceDefault_Light";
????????}
????}
public??static??Object?getobj(){
????????return?selfObj;
????} 




