scannerlib jni 实现回调功能
This commit is contained in:
parent
47ed82de45
commit
72dcc5813d
|
@ -37,4 +37,8 @@ Java_com_easing_java_HGScannerLib_SaveImage
|
|||
Java_com_easing_java_HGScannerLib_ReleaseImage
|
||||
Java_com_easing_java_HGScannerLib_GetImageInfo
|
||||
Java_com_easing_java_HGScannerLib_GetImageData
|
||||
Java_com_easing_java_HGScannerLib_GetImageDpi
|
||||
Java_com_easing_java_HGScannerLib_GetImageDpi
|
||||
|
||||
Java_com_easing_java_HGScannerLib_InitDevice
|
||||
Java_com_easing_java_HGScannerLib_DeinitDevice
|
||||
Java_com_easing_java_HGScannerLib_GetDeviceNameList
|
|
@ -4,6 +4,7 @@
|
|||
extern "C" JNIEXPORT jlong JNICALL Java_com_easing_java_HGScannerLib_LoadImage(
|
||||
JNIEnv* env, jclass clazz, jstring filePath)
|
||||
{
|
||||
(void)clazz;
|
||||
printf("\nJava_com_easing_java_HGScannerLib_LoadImage\n");
|
||||
|
||||
jboolean isCopy;
|
||||
|
@ -20,6 +21,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_com_easing_java_HGScannerLib_LoadImage(
|
|||
extern "C" JNIEXPORT jboolean JNICALL Java_com_easing_java_HGScannerLib_SaveImage(
|
||||
JNIEnv* env, jclass clazz, jlong img, jstring filePath, jobject saveParam)
|
||||
{
|
||||
(void)clazz;
|
||||
printf("\nJava_com_easing_java_HGScannerLib_SaveImage\n");
|
||||
|
||||
HGLibSaveImageParam saveParam2 = {0};
|
||||
|
@ -49,6 +51,8 @@ extern "C" JNIEXPORT jboolean JNICALL Java_com_easing_java_HGScannerLib_SaveImag
|
|||
extern "C" JNIEXPORT jboolean JNICALL Java_com_easing_java_HGScannerLib_ReleaseImage(
|
||||
JNIEnv* env, jclass clazz, jlong img)
|
||||
{
|
||||
(void)env;
|
||||
(void)clazz;
|
||||
printf("\nJava_com_easing_java_HGScannerLib_ReleaseImage\n");
|
||||
|
||||
HGBool ret = HGLib_ReleaseImage((HGLibImage)img);
|
||||
|
@ -61,6 +65,7 @@ extern "C" JNIEXPORT jboolean JNICALL Java_com_easing_java_HGScannerLib_ReleaseI
|
|||
extern "C" JNIEXPORT jobject JNICALL Java_com_easing_java_HGScannerLib_GetImageInfo(
|
||||
JNIEnv* env, jclass clazz, jlong img)
|
||||
{
|
||||
(void)clazz;
|
||||
printf("\nJava_com_easing_java_HGScannerLib_GetImageInfo\n");
|
||||
|
||||
jclass cls = env->FindClass("com/easing/java/HGLibImageInfo");
|
||||
|
@ -86,6 +91,7 @@ extern "C" JNIEXPORT jobject JNICALL Java_com_easing_java_HGScannerLib_GetImageI
|
|||
extern "C" JNIEXPORT jbyteArray JNICALL Java_com_easing_java_HGScannerLib_GetImageData(
|
||||
JNIEnv* env, jclass clazz, jlong img)
|
||||
{
|
||||
(void)clazz;
|
||||
printf("\nJava_com_easing_java_HGScannerLib_GetImageData\n");
|
||||
|
||||
jbyteArray imgData;
|
||||
|
@ -117,6 +123,7 @@ extern "C" JNIEXPORT jbyteArray JNICALL Java_com_easing_java_HGScannerLib_GetIma
|
|||
extern "C" JNIEXPORT jobject JNICALL Java_com_easing_java_HGScannerLib_GetImageDpi(
|
||||
JNIEnv* env, jclass clazz, jlong img)
|
||||
{
|
||||
(void)clazz;
|
||||
printf("\nJava_com_easing_java_HGScannerLib_GetImageDpi\n");
|
||||
|
||||
jclass cls = env->FindClass("com/easing/java/HGLibImageDpi");
|
||||
|
@ -135,3 +142,146 @@ extern "C" JNIEXPORT jobject JNICALL Java_com_easing_java_HGScannerLib_GetImageD
|
|||
printf("\n");
|
||||
return imgDpi;
|
||||
}
|
||||
|
||||
JavaVM *g_VMDeviceHotPlug = NULL;
|
||||
jobject g_objDeviceHotPlug = NULL;
|
||||
|
||||
static void HGAPI DeviceHotPlugEventFunc(HGUInt event, const HGChar *deviceName, HGPointer param)
|
||||
{
|
||||
(void)param;
|
||||
if (NULL == g_VMDeviceHotPlug)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
HGBool needDetach = HGFALSE;
|
||||
JNIEnv *env = NULL;
|
||||
|
||||
//获取当前native线程是否有没有被附加到jvm环境中
|
||||
int getEnvStat = g_VMDeviceHotPlug->GetEnv((void **)&env, JNI_VERSION_1_6);
|
||||
if (getEnvStat == JNI_EDETACHED)
|
||||
{
|
||||
// 如果没有,主动附加到jvm环境中,获取到env
|
||||
if (g_VMDeviceHotPlug->AttachCurrentThread((void **)&env, NULL) != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
needDetach = HGTRUE;
|
||||
}
|
||||
|
||||
//通过全局变量g_obj获取到要回调的类
|
||||
jclass cls = env->GetObjectClass(g_objDeviceHotPlug);
|
||||
if (NULL != cls)
|
||||
{
|
||||
jmethodID jmethodId = env->GetMethodID(cls, "onDeviceHotPlugEvent", "(ILjava/lang/String;)V");
|
||||
if (NULL != jmethodId)
|
||||
{
|
||||
env->CallVoidMethod(g_objDeviceHotPlug, jmethodId, (jint)event, env->NewStringUTF(deviceName));
|
||||
}
|
||||
}
|
||||
|
||||
if (needDetach)
|
||||
{
|
||||
g_VMDeviceHotPlug->DetachCurrentThread();
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL Java_com_easing_java_HGScannerLib_InitDevice(
|
||||
JNIEnv* env, jobject thiz)
|
||||
{
|
||||
printf("\nJava_com_easing_java_HGScannerLib_InitDevice\n");
|
||||
|
||||
if (NULL != g_VMDeviceHotPlug)
|
||||
{
|
||||
printf("Already Init Device\n");
|
||||
return (jboolean)HGFALSE;
|
||||
}
|
||||
|
||||
env->GetJavaVM(&g_VMDeviceHotPlug);
|
||||
g_objDeviceHotPlug = env->NewGlobalRef(thiz);
|
||||
|
||||
HGBool ret = HGLib_InitDevice(DeviceHotPlugEventFunc, NULL);
|
||||
printf("ret=%d\n", ret);
|
||||
if (!ret)
|
||||
{
|
||||
env->DeleteGlobalRef(g_objDeviceHotPlug);
|
||||
g_objDeviceHotPlug = NULL;
|
||||
g_VMDeviceHotPlug = NULL;
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
return (jboolean)ret;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL Java_com_easing_java_HGScannerLib_DeinitDevice(
|
||||
JNIEnv* env, jclass clazz)
|
||||
{
|
||||
(void)clazz;
|
||||
printf("\nJava_com_easing_java_HGScannerLib_DeinitDevice\n");
|
||||
|
||||
if (NULL == g_VMDeviceHotPlug)
|
||||
{
|
||||
printf("Do not Init Device yet\n");
|
||||
return (jboolean)HGFALSE;
|
||||
}
|
||||
|
||||
HGBool ret = HGLib_DeinitDevice();
|
||||
printf("ret=%d\n", ret);
|
||||
if (ret)
|
||||
{
|
||||
env->DeleteGlobalRef(g_objDeviceHotPlug);
|
||||
g_objDeviceHotPlug = NULL;
|
||||
g_VMDeviceHotPlug = NULL;
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
return (jboolean)ret;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jobjectArray JNICALL Java_com_easing_java_HGScannerLib_GetDeviceNameList(
|
||||
JNIEnv* env, jclass clazz)
|
||||
{
|
||||
(void)clazz;
|
||||
printf("\nJava_com_easing_java_HGScannerLib_GetDeviceNameList\n");
|
||||
|
||||
jobjectArray devNameList;
|
||||
|
||||
HGChar** devNameList2 = HGLib_GetDeviceNameList();
|
||||
printf("devNameList=0x%p\n", devNameList2);
|
||||
if (NULL != devNameList2)
|
||||
{
|
||||
HGUInt count = 0;
|
||||
HGChar** p = devNameList2;
|
||||
while (0 != *p)
|
||||
{
|
||||
printf("devName=%s\n", *p);
|
||||
++count;
|
||||
++p;
|
||||
}
|
||||
|
||||
printf("count=%u\n", count);
|
||||
|
||||
jclass cls = env->FindClass("java/lang/String");
|
||||
devNameList = env->NewObjectArray(count, cls, env->NewStringUTF(NULL));
|
||||
|
||||
HGUInt i = 0;
|
||||
while (0 != devNameList2[i])
|
||||
{
|
||||
env->SetObjectArrayElement(devNameList, i, env->NewStringUTF(devNameList2[i]));
|
||||
++i;
|
||||
}
|
||||
|
||||
HGLib_ReleaseDeviceNameList(devNameList2);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("cound=%u\n", 0);
|
||||
|
||||
jclass cls = env->FindClass("java/lang/String");
|
||||
devNameList = env->NewObjectArray(0, cls, env->NewStringUTF(NULL));
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
return devNameList;
|
||||
}
|
||||
|
|
|
@ -33,6 +33,16 @@ public class HGScannerLib {
|
|||
public native byte[] GetImageData(long img);
|
||||
public native HGLibImageDpi GetImageDpi(long img);
|
||||
|
||||
public native boolean InitDevice();
|
||||
public native boolean DeinitDevice();
|
||||
public native String[] GetDeviceNameList();
|
||||
|
||||
public void onDeviceHotPlugEvent(int event, String deviceName) {
|
||||
System.out.println("onDeviceHotPlugEvent");
|
||||
System.out.println("event=" + event);
|
||||
System.out.println("deviceName=" + deviceName);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
System.out.println("hello world");
|
||||
|
||||
|
@ -64,5 +74,16 @@ public class HGScannerLib {
|
|||
System.out.println("imgData.length=" + imgData.length);
|
||||
|
||||
inst.ReleaseImage(img);
|
||||
|
||||
inst.InitDevice();
|
||||
|
||||
String[] devNameList = inst.GetDeviceNameList();
|
||||
System.out.println("devNameList:");
|
||||
for (int i = 0; i < devNameList.length; ++i)
|
||||
{
|
||||
System.out.println(" " + i + ":" + devNameList[i]);
|
||||
}
|
||||
|
||||
inst.DeinitDevice();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue