diff --git a/app/src/main/cpp/MicroPhoto.cpp b/app/src/main/cpp/MicroPhoto.cpp index abcfd73f..e624286c 100644 --- a/app/src/main/cpp/MicroPhoto.cpp +++ b/app/src/main/cpp/MicroPhoto.cpp @@ -186,7 +186,7 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env = NULL; jint result = -1; - + // 在 JNI_OnLoad 或其他初始化函数中注册 #if 0 signal(SIGSEGV, sighandler); @@ -314,12 +314,10 @@ Java_com_xypower_mpapp_MainActivity_takePhoto( unsigned char id = (unsigned char)channel - 1; Camera2Reader *camera = new Camera2Reader(id); - const char *pathStr = env->GetStringUTFChars(path, 0); - const char *fileNameStr = env->GetStringUTFChars(fileName, 0); + std::string pathStr = jstring2string(env, path); + std::string fileNameStr = jstring2string(env, fileName); - camera->Open(pathStr, fileNameStr); - env->ReleaseStringUTFChars(fileName, fileNameStr); - env->ReleaseStringUTFChars(path, pathStr); + camera->Open(pathStr.c_str(), fileNameStr.c_str()); camera->start(); @@ -351,12 +349,12 @@ Java_com_xypower_mpapp_MicroPhotoService_init( env->SetObjectField(pThis, fieldId, modelName); bool udpOrTcp = (networkProtocol != 0); // 0: tcp - const char *appPathStr = appPath == NULL ? NULL : env->GetStringUTFChars(appPath, 0); - const char *ipStr = ip == NULL ? NULL : env->GetStringUTFChars(ip, 0); - const char *cmdidStr = cmdid == NULL ? NULL : env->GetStringUTFChars(cmdid, 0); - const char *simcardStr = simcard == NULL ? NULL : env->GetStringUTFChars(simcard, 0); - const char *tfCardPathStr = tfCardPath == NULL ? NULL : env->GetStringUTFChars(tfCardPath, 0); - const char *nativeLibraryDirStr = nativeLibraryDir == NULL ? NULL : env->GetStringUTFChars(nativeLibraryDir, 0); + std::string appPathStr = jstring2string(env, appPath); + std::string ipStr = jstring2string(env, ip); + std::string cmdidStr = jstring2string(env, cmdid); + std::string simcardStr = jstring2string(env, simcard); + std::string tfCardPathStr = jstring2string(env, tfCardPath); + std::string nativeLibraryDirStr = jstring2string(env, nativeLibraryDir); JavaVM* vm = NULL; jint ret = env->GetJavaVM(&vm); @@ -367,14 +365,14 @@ Java_com_xypower_mpapp_MicroPhotoService_init( CTerminal* pTerminal = NewTerminal(protocol); - CPhoneDevice* device = new CPhoneDevice(vm, pThis, MakeString(appPathStr), (uint64_t)netHandle, versionCode, MakeString(nativeLibraryDirStr)); + CPhoneDevice* device = new CPhoneDevice(vm, pThis, appPathStr, (uint64_t)netHandle, versionCode, nativeLibraryDirStr); device->SetListener(pTerminal); device->UpdateSignalLevel(signalLevel); device->SetBuildTime(buildTime / 1000); - device->UpdateSimcard(MakeString(simcardStr)); - device->UpdateTfCardPath(MakeString(tfCardPathStr)); + device->UpdateSimcard(simcardStr); + device->UpdateTfCardPath(tfCardPathStr); - pTerminal->InitServerInfo(MakeString(appPathStr), MakeString(cmdidStr), MakeString(ipStr), port, udpOrTcp, encryptData); + pTerminal->InitServerInfo(appPathStr, cmdidStr, ipStr, port, udpOrTcp, encryptData); // pTerminal->SetPacketSize(1 * 1024); // 1K #if defined(USING_NRSEC) && !defined(USING_NRSEC_VPN) pTerminal->InitEncryptionInfo(simcardStr, "/dev/spidev0.0", ""); @@ -386,12 +384,6 @@ Java_com_xypower_mpapp_MicroPhotoService_init( #ifdef _DEBUG ALOGD("Finish Startup"); #endif - if (appPathStr != NULL) env->ReleaseStringUTFChars(appPath, appPathStr); - if (ipStr != NULL) env->ReleaseStringUTFChars(ip, ipStr); - if (cmdidStr != NULL) env->ReleaseStringUTFChars(cmdid, cmdidStr); - if (simcardStr != NULL) env->ReleaseStringUTFChars(simcard, simcardStr); - if (tfCardPathStr != NULL) env->ReleaseStringUTFChars(tfCardPath, tfCardPathStr); - if (nativeLibraryDirStr != NULL) env->ReleaseStringUTFChars(nativeLibraryDir, nativeLibraryDirStr); if (!res) { @@ -492,11 +484,8 @@ Java_com_xypower_mpapp_MicroPhotoService_takePhoto( osds[2].text = cfg.osd.rightBottom; osds[3].text = cfg.osd.leftBottom; - const char* pathStr = env->GetStringUTFChars(path, 0); - - device->TakePhoto(photoInfo, osds, MakeString(pathStr)); - - env->ReleaseStringUTFChars(path, pathStr); + std::string pathStr = jstring2string(env, path); + device->TakePhoto(photoInfo, osds, pathStr); // device->TurnOffCameraPower(NULL); // if (photoInfo.usbCamera) @@ -730,9 +719,7 @@ Java_com_xypower_mpapp_MicroPhotoService_recoganizePicture( JNIEnv* env, jclass cls, jstring paramPath, jstring binPath, jstring blobName8, jstring blobName16, jstring blobName32, jstring picPath) { - const char* pParamPathStr = env->GetStringUTFChars(paramPath, 0); - std::string paramPathStr = MakeString(pParamPathStr); - env->ReleaseStringUTFChars(paramPath, pParamPathStr); + std::string paramPathStr = jstring2string(env, paramPath); const char* pBinPathStr = env->GetStringUTFChars(binPath, 0); std::string binPathStr = MakeString(pBinPathStr);