編輯:關於android開發
本文接著實現《Android java傳遞int類型數據給C》的還未實現的方法:
public native String sayHelloInC(String s);
先貼一個工具方法,具體意義後面的文章將介紹
/** * 把一個jstring轉換成一個c語言的char* 類型. */ char* _JString2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = (*env)->FindClass(env, "java/lang/String"); jstring strencode = (*env)->NewStringUTF(env, "GB2312"); jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes", "(Ljava/lang/String;)[B"); jbyteArray barr = (jbyteArray) (*env)->CallObjectMethod(env, jstr, mid, strencode); // String .getByte("GB2312"); jsize alen = (*env)->GetArrayLength(env, barr); jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE); if (alen > 0) { rtn = (char*) malloc(alen + 1); //"\0" memcpy(rtn, ba, alen); rtn[alen] = 0; } (*env)->ReleaseByteArrayElements(env, barr, ba, 0); return rtn; }
接著完成sayHelloInC函數
/* * Class: com_wuyudong_javapassdata_JNI * Method: sayHelloInC * Signature: (Ljava/lang/String;)Ljava/lang/String; */
JNIEXPORT jstring JNICALL Java_com_wuyudong_javapassdata_JNI_sayHelloInC( JNIEnv * env, jobject clazz, jstring jstr) { //調用工具方法把java中的string類型轉換成C語言中的char× char* cstr = _JString2CStr(env, jstr); int len = strlen(cstr); int i; for (i = 0; i < len; i++) { *(cstr + i) += 1; } return (*env)->NewStringUTF(env, cstr); }
MainActivity.java中添加下面代碼:
public void passString(View v) { Toast.makeText(getApplicationContext(), jni.sayHelloInC("hello yudong"), 0).show(); }
搞定,運行項目
獲取更多C相關知識,關注公眾號:“csuanfa”
3D圖片采集與展示(SurfaceView 自適應 Camera, 錄制視頻, 抽取幀), 最近在做一個3D圖片采集與展示。 主要功能為:自定義Camera(google
自己實現android側滑菜單 當今的android應用設計中,一種主流的設計方式就是會擁有一個側滑菜單,以圖為證: 實現這樣的側滑效果,在5.0以前
第四篇 Android應用程序詳細解析,第四篇android我們繼續的沿用上一篇所建立的應用。 Android應用程序可以分為:應用程序源代碼(.java),應用程序描
android 史上最簡單易懂的跨進程通訊(Messenger)!,androidmessenger不需要AIDL也不需要復雜的ContentProvider,也不需要S