c调用activity中的方法
1.在某一个类中如MainActivity类中调用showToast方法
在MainActivity中
/*
* 让c代码调用activity中的showToast方法
* */
public native void callbacShowToast();
public void showToast(){
System.out.println("showToast------");
Toast.makeText(MainActivity.this,"showToast------",Toast.LENGTH_SHORT).show();
}
2.生成MainActivity的头文件
3.在c代码中实现native方法
/*
callbacShowToast方法是MainActivity中的方法 所以FindClass参数传www/basketi/cn/basketball/ccalljavademo/MainActivity
GetMethodID()参数三 调用java的哪个方法 就传入哪个方法showToast
然后不需要通过反射获取到实例,直接把(JNIEnv * env, jobject job) 中的job传给CallVoidMethod方法
*/
JNIEXPORT void JNICALL Java_www_basketi_cn_basketball_ccalljavademo_MainActivity_callbacShowToast
(JNIEnv * env, jobject job){
//l利用反射 实例化MainActivity对象
//1.得到字节码 www/basketi/cn/basketball/ccalljavademo/MainActivity调用方法所在的类的全类名
jclass jclazz=(*env)->FindClass(env,"www/basketi/cn/basketball/ccalljavademo/MainActivity");
//2.得到方法 最后一个参数是方法签名
jmethodID jmethodIDs=(*env)->GetMethodID(env,jclazz,"showToast","()V");
//签名获取的方法:rebuild工程后,app下 build - intermediates - classes - debug- 右键show in explore - 按住shift + 右键- 在此处打开命令窗口 - javap -s 包名.JNI 回车
//3.调用activity中的方法时不需要实例化该类,直接将job传入即可
// jobject jobject=(*env)->AllocObject(env,jclazz);
//4.调用方法 将job 参数传给java
(*env)->CallVoidMethod(env,job,jmethodIDs);
}
4.java中调用
1.在某一个类中如MainActivity类中调用showToast方法
在MainActivity中
/*
* 让c代码调用activity中的showToast方法
* */
public native void callbacShowToast();
public void showToast(){
System.out.println("showToast------");
Toast.makeText(MainActivity.this,"showToast------",Toast.LENGTH_SHORT).show();
}
2.生成MainActivity的头文件
3.在c代码中实现native方法
/*
callbacShowToast方法是MainActivity中的方法 所以FindClass参数传www/basketi/cn/basketball/ccalljavademo/MainActivity
GetMethodID()参数三 调用java的哪个方法 就传入哪个方法showToast
然后不需要通过反射获取到实例,直接把(JNIEnv * env, jobject job) 中的job传给CallVoidMethod方法
*/
JNIEXPORT void JNICALL Java_www_basketi_cn_basketball_ccalljavademo_MainActivity_callbacShowToast
(JNIEnv * env, jobject job){
//l利用反射 实例化MainActivity对象
//1.得到字节码 www/basketi/cn/basketball/ccalljavademo/MainActivity调用方法所在的类的全类名
jclass jclazz=(*env)->FindClass(env,"www/basketi/cn/basketball/ccalljavademo/MainActivity");
//2.得到方法 最后一个参数是方法签名
jmethodID jmethodIDs=(*env)->GetMethodID(env,jclazz,"showToast","()V");
//签名获取的方法:rebuild工程后,app下 build - intermediates - classes - debug- 右键show in explore - 按住shift + 右键- 在此处打开命令窗口 - javap -s 包名.JNI 回车
//3.调用activity中的方法时不需要实例化该类,直接将job传入即可
// jobject jobject=(*env)->AllocObject(env,jclazz);
//4.调用方法 将job 参数传给java
(*env)->CallVoidMethod(env,job,jmethodIDs);
}
4.java中调用
MainActivity.this.callbacShowToast();
源码下载位置:http://download.csdn.net/detail/lzq520210/9733872