diff --git a/.idea/encodings.xml b/.idea/encodings.xml index b1415f4..415e582 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,6 +1,22 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/render.experimental.xml b/.idea/render.experimental.xml new file mode 100644 index 0000000..8ec256a --- /dev/null +++ b/.idea/render.experimental.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..94a25f7 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d10330c..0be1ebe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,18 +11,31 @@ android { minSdkVersion 8 targetSdkVersion 15 versionCode 1 - versionName "V1.077" + versionName "V1.079" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } - buildTypes { + signingConfigs { release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + storeFile file(RELEASE_STOREFILE); + storePassword RELEASE_STORE_PASSWORD; + keyAlias RELEASE_KEY_ALIAS + keyPassword RELEASE_KEY_PASSWORD } } + buildTypes { + release { + minifyEnabled false //是否代码混淆 + multiDexEnabled true //防止方法数量超过65536导致错误 + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + //配置签名 + signingConfig signingConfigs.release + } + } + + //关闭代码格式检查 lintOptions { abortOnError false } @@ -33,8 +46,8 @@ android { } //加载动态库 - sourceSets{ - main{ + sourceSets { + main { jniLibs.srcDir(['libs']) } } @@ -42,5 +55,5 @@ android { dependencies { //加载jar包 - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) } \ No newline at end of file diff --git a/app/jni/Android.mk b/app/jni/Android.mk index 1fd95e8..f4ce1c3 100644 --- a/app/jni/Android.mk +++ b/app/jni/Android.mk @@ -18,7 +18,7 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -TARGET_PLATFORM := android-8 +TARGET_PLATFORM := android-3 LOCAL_MODULE := serial_port LOCAL_SRC_FILES := SerialPort.c LOCAL_LDLIBS := -llog diff --git a/app/jni/Application.mk b/app/jni/Application.mk new file mode 100644 index 0000000..7866257 --- /dev/null +++ b/app/jni/Application.mk @@ -0,0 +1 @@ +APP_ABI := armeabi armeabi-v7a x86 diff --git a/app/jni/SerialPort.c b/app/jni/SerialPort.c index b4926b3..84748a7 100644 --- a/app/jni/SerialPort.c +++ b/app/jni/SerialPort.c @@ -1,5 +1,5 @@ /* - * Copyright 2009 Cedric Priscal + * Copyright 2009-2011 Cedric Priscal * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,52 +22,14 @@ #include #include +#include "SerialPort.h" + #include "android/log.h" static const char *TAG="serial_port"; #define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, TAG, fmt, ##args) #define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, TAG, fmt, ##args) #define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt, ##args) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: com_android_barcode_SerialPort - * Method: open - * Signature: (Ljava/lang/String;I)I - */ -JNIEXPORT jint JNICALL Java_com_android_barcode_SerialPort_open - (JNIEnv *, jclass, jstring, jint); - -/* - * Class: com_android_barcode_SerialPort - * Method: write - * Signature: (ILjava/lang/String;I)I - */ -JNIEXPORT jint JNICALL Java_com_android_barcode_SerialPort_write - (JNIEnv *, jobject, jint, jstring, jint); - -/* - * Class: com_android_barcode_SerialPort - * Method: read - * Signature: (II)[B - */ -JNIEXPORT jbyteArray JNICALL Java_com_android_barcode_SerialPort_read - (JNIEnv *, jobject, jint, jint); - -/* - * Class: com_android_barcode_SerialPort - * Method: close - * Signature: (I)V - */ -JNIEXPORT void JNICALL Java_com_android_barcode_SerialPort_close - (JNIEnv *, jobject, jint); - -#ifdef __cplusplus -} -#endif - static speed_t getBaudrate(jint baudrate) { switch(baudrate) { @@ -107,15 +69,16 @@ static speed_t getBaudrate(jint baudrate) } /* - * Class: cedric_serial_SerialPort + * Class: android_serialport_SerialPort * Method: open - * Signature: (Ljava/lang/String;)V + * Signature: (Ljava/lang/String;II)Ljava/io/FileDescriptor; */ -JNIEXPORT jint JNICALL Java_com_android_barcode_SerialPort_open - (JNIEnv *env, jobject thiz, jstring path, jint baudrate) +JNIEXPORT jobject JNICALL Java_android_1serialport_1api_SerialPort_open + (JNIEnv *env, jclass thiz, jstring path, jint baudrate, jint flags) { int fd; speed_t speed; + jobject mFileDescriptor; /* Check arguments */ { @@ -123,6 +86,7 @@ JNIEXPORT jint JNICALL Java_com_android_barcode_SerialPort_open if (speed == -1) { /* TODO: throw an exception */ LOGE("Invalid baudrate"); + return NULL; } } @@ -130,8 +94,8 @@ JNIEXPORT jint JNICALL Java_com_android_barcode_SerialPort_open { jboolean iscopy; const char *path_utf = (*env)->GetStringUTFChars(env, path, &iscopy); - LOGD("Opening serial port %s", path_utf); - fd = open(path_utf, O_RDWR | O_SYNC); + LOGD("Opening serial port %s with flags 0x%x", path_utf, O_RDWR | flags); + fd = open(path_utf, O_RDWR | flags); LOGD("open() fd = %d", fd); (*env)->ReleaseStringUTFChars(env, path, path_utf); if (fd == -1) @@ -139,6 +103,7 @@ JNIEXPORT jint JNICALL Java_com_android_barcode_SerialPort_open /* Throw an exception */ LOGE("Cannot open port"); /* TODO: throw an exception */ + return NULL; } } @@ -151,136 +116,52 @@ JNIEXPORT jint JNICALL Java_com_android_barcode_SerialPort_open LOGE("tcgetattr() failed"); close(fd); /* TODO: throw an exception */ + return NULL; } cfmakeraw(&cfg); cfsetispeed(&cfg, speed); cfsetospeed(&cfg, speed); - /*******************************/ - cfg.c_cflag &= ~CSIZE; - cfg.c_lflag &= ~(ICANON|ECHO|ECHOE|ISIG); - cfg.c_oflag &= ~OPOST; - //'8' bit - cfg.c_cflag |= CS8; - //'N' PARENB - cfg.c_cflag &= ~PARENB; - cfg.c_iflag &= ~INPCK; - //'1' STOP - cfg.c_cflag &= ~CSTOPB; - - cfg.c_cc[VTIME] = 15; - cfg.c_cc[VMIN] = 0; - tcflush(fd, TCIFLUSH); - /*********************************/ if (tcsetattr(fd, TCSANOW, &cfg)) { LOGE("tcsetattr() failed"); close(fd); /* TODO: throw an exception */ - } - } - - - return fd; -} -/* - * Class: cedric_serial_SerialPort - * Method: write - * Signature: ()V - */ - -JNIEXPORT jint JNICALL Java_com_android_barcode_SerialPort_write - (JNIEnv *env, jobject obj, jint fd, jstring str, jint len) -{ - jboolean iscopy; - const char *buff_utf = (*env)->GetStringUTFChars(env, str, &iscopy); - int wlen = 0; - wlen = write(fd, buff_utf, len); - if(wlen > 0) - { - LOGD("Write serial port %s\n", buff_utf); - } - else - { - LOGE("Write failed\n"); - } - (*env)->ReleaseStringUTFChars(env, str, buff_utf); - LOGD("Write finish!\n"); - return wlen; -} -/* - * Class: cedric_serial_SerialPort - * Method: read - * Signature: ()V - */ - -JNIEXPORT jbyteArray JNICALL Java_com_android_barcode_SerialPort_read - (JNIEnv *env, jobject obj, jint fd, jint len) -{ - int reval; - int nread = 0; - char buff[len]; - char result[len]; - struct timeval tv; - jbyteArray jba; - fd_set rfds; - - while(1) - { - FD_ZERO(&rfds); - FD_SET(fd, &rfds); - tv.tv_sec = 0; - tv.tv_usec = 100000; - if ((reval = select(1 + fd, &rfds, NULL, NULL, &tv)) > 0) - { - if(FD_ISSET(fd, &rfds)) - { - int temp = read(fd, buff + nread, len); - nread += temp; - LOGD("%i us is used", 100000 - tv.tv_usec); - LOGD("wo have data %d\n", temp); - } - } - else if(reval == 0 && nread != 0) //timeout means - { -// int ffd; - buff[nread]=0; -// ffd = open("/data/ndk", O_WRONLY | O_TRUNC); -// write(ffd, buff, nread); -// close(ffd); - int i, j; - for(i = 0, j = 0; i < nread; i++) - { - if(buff[i] != 0) - { - result[j] = buff[i]; - j++; - } - // LOGD("0x%2x ", buff[i]); - } - //LOGD("\n"); - //result[j] = 0; - jba = (*env)->NewByteArray(env, j); - (*env)->SetByteArrayRegion(env, jba, 0, j, result); -/* jba = (*env)->NewByteArray(env, nread); - (*env)->SetByteArrayRegion(env, jba, 0, nread, buff);*/ - LOGD("readlength=%d\n, reallength=%d\n, all data received!\n", nread, j); - return jba; - } - else - { return NULL; } } + + /* Create a corresponding file descriptor */ + { + jclass cFileDescriptor = (*env)->FindClass(env, "java/io/FileDescriptor"); + jmethodID iFileDescriptor = (*env)->GetMethodID(env, cFileDescriptor, "", "()V"); + jfieldID descriptorID = (*env)->GetFieldID(env, cFileDescriptor, "descriptor", "I"); + mFileDescriptor = (*env)->NewObject(env, cFileDescriptor, iFileDescriptor); + (*env)->SetIntField(env, mFileDescriptor, descriptorID, (jint)fd); + } + + return mFileDescriptor; } + /* * Class: cedric_serial_SerialPort * Method: close * Signature: ()V */ -JNIEXPORT void JNICALL Java_com_android_barcode_SerialPort_close - (JNIEnv *env, jobject obj, jint fd) +JNIEXPORT void JNICALL Java_android_1serialport_1api_SerialPort_close + (JNIEnv *env, jobject thiz) { - close(fd); + jclass SerialPortClass = (*env)->GetObjectClass(env, thiz); + jclass FileDescriptorClass = (*env)->FindClass(env, "java/io/FileDescriptor"); + + jfieldID mFdID = (*env)->GetFieldID(env, SerialPortClass, "mFd", "Ljava/io/FileDescriptor;"); + jfieldID descriptorID = (*env)->GetFieldID(env, FileDescriptorClass, "descriptor", "I"); + + jobject mFd = (*env)->GetObjectField(env, thiz, mFdID); + jint descriptor = (*env)->GetIntField(env, mFd, descriptorID); + + LOGD("close(fd = %d)", descriptor); + close(descriptor); } + diff --git a/app/jni/SerialPort.h b/app/jni/SerialPort.h new file mode 100644 index 0000000..61f1fb2 --- /dev/null +++ b/app/jni/SerialPort.h @@ -0,0 +1,29 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class android_serialport_api_SerialPort */ + +#ifndef _Included_android_serialport_api_SerialPort +#define _Included_android_serialport_api_SerialPort +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: android_serialport_api_SerialPort + * Method: open + * Signature: (Ljava/lang/String;II)Ljava/io/FileDescriptor; + */ +JNIEXPORT jobject JNICALL Java_android_1serialport_1api_SerialPort_open + (JNIEnv *, jclass, jstring, jint, jint); + +/* + * Class: android_serialport_api_SerialPort + * Method: close + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_android_1serialport_1api_SerialPort_close + (JNIEnv *, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/app/jni/gen_SerialPort_h.sh b/app/jni/gen_SerialPort_h.sh new file mode 100644 index 0000000..1998186 --- /dev/null +++ b/app/jni/gen_SerialPort_h.sh @@ -0,0 +1,3 @@ +#!/bin/sh +javah -o SerialPort.h -jni -classpath ../src android_serialport_api.SerialPort + diff --git a/app/libs/armeabi/libmsc.so b/app/libs/armeabi/libmsc.so new file mode 100644 index 0000000..e02fc91 Binary files /dev/null and b/app/libs/armeabi/libmsc.so differ diff --git a/app/libs/armeabi/libserial_port.so b/app/libs/armeabi/libserial_port.so index 3ea9b56..d1c3622 100644 Binary files a/app/libs/armeabi/libserial_port.so and b/app/libs/armeabi/libserial_port.so differ diff --git a/app/libs/flytek.jar b/app/libs/flytek.jar new file mode 100644 index 0000000..e4ed582 Binary files /dev/null and b/app/libs/flytek.jar differ diff --git a/app/libs/honeywell.jar b/app/libs/honeywell.jar new file mode 100644 index 0000000..ee4553d Binary files /dev/null and b/app/libs/honeywell.jar differ diff --git a/app/libs/urobo.jar b/app/libs/urobo.jar new file mode 100644 index 0000000..eef7d29 Binary files /dev/null and b/app/libs/urobo.jar differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3051141..0dff9d3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,8 @@ + package="com.example.chaoran" + android:versionCode="1" + android:versionName="V1.079"> @@ -14,131 +16,113 @@ - - - + - - - - - - - - - - - - - - - - + + + + + - - - - - - - - + + + + + + - + android:name="map.baidu.com.BMapManagerUtil" + android:icon="@drawable/ic_launcher" + android:label="@string/app_name" + android:persistent="true" + android:theme="@style/AppTheme" + tools:ignore="HardcodedDebugMode"> + + android:name="com.example.chaoran.MainActivity" + android:label="@string/title_activity_main" + android:screenOrientation="behind" + android:configChanges="orientation|screenSize|keyboardHidden"> - - + + + - + android:name="com.example.chaoran.NetWorkSet" + android:label="@string/title_activity_net_work_set" + android:screenOrientation="behind" /> - + android:name="com.example.chaoran.MenuActivity" + android:label="@string/title_activity_menu" + android:screenOrientation="behind" /> - + android:name="com.example.chaoran.DjActivity" + android:label="@string/title_activity_dj" + android:screenOrientation="behind" + android:launchMode="singleTask" /> - + android:name="com.example.chaoran.ParamActivity" + android:label="@string/title_activity_param" + android:screenOrientation="behind" /> - + android:name="com.example.chaoran.DjtqActivity" + android:label="@string/djtq_activity" + android:screenOrientation="behind" /> - + android:name="com.example.chaoran.UpdatePwdActivity" + android:label="@string/title_activity_update_pwd" + android:screenOrientation="behind" /> + android:name="map.baidu.com.BDMapActivity" + android:hardwareAccelerated="false" + android:label="@string/title_activity_bdmap" + android:screenOrientation="behind"> + android:name="android.support.PARENT_ACTIVITY" + android:value="com.baidu.mapapi.MapActivity" /> - + android:name="com.baidu.location.f" + android:enabled="true" + android:process=":remote" /> - + android:name="com.chaoran.lx.activity.DownDataActivity" + android:label="@string/title_activity_down_data" + android:screenOrientation="behind" /> - + android:name="com.chaoran.lx.activity.Lx_Param_Activity" + android:label="@string/title_activity_lx__param_" + android:screenOrientation="behind" /> - + android:name="com.example.chaoran.MipcaActivityCapture" + android:label="@string/title_activity_camera_scan" + android:screenOrientation="behind" + android:windowSoftInputMode="stateAlwaysHidden" /> - + android:name="com.example.chaoran.PdaRegActivity" + android:label="@string/title_activity_pda_reg" /> + + + + - \ No newline at end of file diff --git a/app/src/main/assets/tts/common.jet b/app/src/main/assets/tts/common.jet new file mode 100644 index 0000000..a2fdf73 Binary files /dev/null and b/app/src/main/assets/tts/common.jet differ diff --git a/app/src/main/assets/tts/xiaofeng.jet b/app/src/main/assets/tts/xiaofeng.jet new file mode 100644 index 0000000..b3e2066 Binary files /dev/null and b/app/src/main/assets/tts/xiaofeng.jet differ diff --git a/app/src/main/assets/tts/xiaoyan.jet b/app/src/main/assets/tts/xiaoyan.jet new file mode 100644 index 0000000..2d266f5 Binary files /dev/null and b/app/src/main/assets/tts/xiaoyan.jet differ diff --git a/app/src/main/java/android_serialport_api/SerialPort.java b/app/src/main/java/android_serialport_api/SerialPort.java index 2274fa7..7cafe72 100644 --- a/app/src/main/java/android_serialport_api/SerialPort.java +++ b/app/src/main/java/android_serialport_api/SerialPort.java @@ -1,17 +1,19 @@ package android_serialport_api; import android.util.Log; +import com.util.DialogUtil; +import map.baidu.com.BMapManagerUtil; import java.io.*; -public class SerialPort { +public class SerialPort{ private static final String TAG = "SerialPort"; private FileDescriptor mFd; private FileInputStream mFileInputStream; private FileOutputStream mFileOutputStream; - public SerialPort(File device, int baudrate, int bits, char event, int stop, int flags) throws SecurityException, + public SerialPort(File device, int baudrate, int flags) throws SecurityException, IOException { if (!device.canRead() || !device.canWrite()) { @@ -22,17 +24,20 @@ public class SerialPort { su.getOutputStream().write(cmd.getBytes()); if ((su.waitFor() != 0) || !device.canRead() || !device.canWrite()) { + DialogUtil.builder(BMapManagerUtil.getGlobalApplicationContext(),"获取su命令权限失败","系统或许未root",15); throw new SecurityException(); } } catch (Exception e) { e.printStackTrace(); + DialogUtil.builder(BMapManagerUtil.getGlobalApplicationContext(),"获取root权限失败",e.toString(),15); throw new SecurityException(); } } - mFd = open(device.getAbsolutePath(), baudrate, bits, event, stop, flags); + mFd = open(device.getAbsolutePath(), baudrate, flags); Log.i("info", "open device!!"); if (mFd == null) { Log.e(TAG, "native open returns null"); + DialogUtil.builder(BMapManagerUtil.getGlobalApplicationContext(),"获取文件描述符失败","native open returns null",15); throw new IOException(); } mFileInputStream = new FileInputStream(mFd); @@ -50,12 +55,12 @@ public class SerialPort { return mFileOutputStream; } - private native static FileDescriptor open(String path, int baudrate, int bits, char event, int stop, int flags); + private native static FileDescriptor open(String path, int baudrate, int flags); public native void close(); static { - System.loadLibrary("serialport"); + System.loadLibrary("serial_port"); } } diff --git a/app/src/main/java/com/chaoran/component/ButAdapter.java b/app/src/main/java/com/chaoran/component/ButAdapter.java index c2ce15c..ed94ee0 100644 --- a/app/src/main/java/com/chaoran/component/ButAdapter.java +++ b/app/src/main/java/com/chaoran/component/ButAdapter.java @@ -5,10 +5,13 @@ import java.util.HashMap; import com.chaoran.db.DBManager; import com.chaoran.lx.activity.DownDataActivity; -import com.activity.chaoran.R; +import com.example.chaoran.DjActivity; +import com.example.chaoran.R; import android.app.ProgressDialog; import android.content.Context; +import android.content.Intent; +import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/chaoran/component/ImageAdpter.java b/app/src/main/java/com/chaoran/component/ImageAdpter.java index f8fa663..84c6ddc 100644 --- a/app/src/main/java/com/chaoran/component/ImageAdpter.java +++ b/app/src/main/java/com/chaoran/component/ImageAdpter.java @@ -1,17 +1,23 @@ package com.chaoran.component; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.example.chaoran.R; + import android.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.GridView; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; -import com.activity.chaoran.R; - -import java.util.List; -import java.util.Map; public class ImageAdpter extends BaseAdapter { private List list; diff --git a/app/src/main/java/com/chaoran/component/MyAdapter.java b/app/src/main/java/com/chaoran/component/MyAdapter.java index 22b92bf..923f40c 100644 --- a/app/src/main/java/com/chaoran/component/MyAdapter.java +++ b/app/src/main/java/com/chaoran/component/MyAdapter.java @@ -4,7 +4,8 @@ import java.util.ArrayList; import java.util.HashMap; import com.chaoran.entiry.Zujian; -import com.activity.chaoran.R; +import com.example.chaoran.DjActivity; +import com.example.chaoran.R; import com.util.DialogUtil; import com.util.SysUtil; diff --git a/app/src/main/java/com/chaoran/db/DBManager.java b/app/src/main/java/com/chaoran/db/DBManager.java index df05b0c..855c70e 100644 --- a/app/src/main/java/com/chaoran/db/DBManager.java +++ b/app/src/main/java/com/chaoran/db/DBManager.java @@ -1,11 +1,20 @@ package com.chaoran.db; +import java.io.ByteArrayInputStream; +import java.io.ObjectInputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.chaoran.entiry.DanJuEntity; + +import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import java.util.*; - public class DBManager { private SqlHelpUtil helper; private SQLiteDatabase db; diff --git a/app/src/main/java/com/chaoran/entiry/PhotographUi.java b/app/src/main/java/com/chaoran/entiry/PhotographUi.java index feb8e37..90e2feb 100644 --- a/app/src/main/java/com/chaoran/entiry/PhotographUi.java +++ b/app/src/main/java/com/chaoran/entiry/PhotographUi.java @@ -1,9 +1,21 @@ package com.chaoran.entiry; +import com.example.chaoran.MainActivity; +import com.util.DialogUtil; +import com.util.SysUtil; + import android.content.Context; +import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; import android.view.Gravity; +import android.view.View; import android.widget.Button; +import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.LinearLayout; public class PhotographUi extends LinearLayout { diff --git a/app/src/main/java/com/chaoran/entiry/SelfCheckBox.java b/app/src/main/java/com/chaoran/entiry/SelfCheckBox.java index 9c7630d..f831005 100644 --- a/app/src/main/java/com/chaoran/entiry/SelfCheckBox.java +++ b/app/src/main/java/com/chaoran/entiry/SelfCheckBox.java @@ -1,6 +1,6 @@ package com.chaoran.entiry; -import com.activity.chaoran.R; +import com.example.chaoran.R; import android.content.Context; import android.util.TypedValue; diff --git a/app/src/main/java/com/chaoran/entiry/SelfDateField.java b/app/src/main/java/com/chaoran/entiry/SelfDateField.java index aec0e38..ac448a2 100644 --- a/app/src/main/java/com/chaoran/entiry/SelfDateField.java +++ b/app/src/main/java/com/chaoran/entiry/SelfDateField.java @@ -16,7 +16,7 @@ import android.widget.ImageButton; import android.widget.RelativeLayout; import com.chaoran.imp.InputInterface; -import com.activity.chaoran.R; +import com.example.chaoran.R; public class SelfDateField extends RelativeLayout implements InputInterface { private SelfEditText et; diff --git a/app/src/main/java/com/chaoran/entiry/SelfTextBut.java b/app/src/main/java/com/chaoran/entiry/SelfTextBut.java index 9c6c8bc..4d8ce62 100644 --- a/app/src/main/java/com/chaoran/entiry/SelfTextBut.java +++ b/app/src/main/java/com/chaoran/entiry/SelfTextBut.java @@ -2,10 +2,16 @@ package com.chaoran.entiry; import com.chaoran.imp.InputInterface; +import com.example.chaoran.R; import android.content.Context; +import android.graphics.Color; import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; import android.text.Editable; import android.util.TypedValue; +import android.view.Gravity; +import android.widget.Button; +import android.widget.EditText; import android.widget.RelativeLayout; public class SelfTextBut extends RelativeLayout implements InputInterface { diff --git a/app/src/main/java/com/chaoran/entiry/Test.java b/app/src/main/java/com/chaoran/entiry/Test.java new file mode 100644 index 0000000..12dcbc6 --- /dev/null +++ b/app/src/main/java/com/chaoran/entiry/Test.java @@ -0,0 +1,25 @@ +package com.chaoran.entiry; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class Test { + public static void main(String[] args) { + Map m=new HashMap(); + m.put("a","1"); + m.put("b","2"); + m.put("c","3"); + Set set=m.keySet(); + for(String a:set){ + System.out.println(a+"---"); + if(a.equals("a")){ + //set.remove(a); + } + } + Set set1=m.keySet(); + for(String b:set1){ + System.out.println(b); + } + } +} diff --git a/app/src/main/java/com/chaoran/entiry/Zujian.java b/app/src/main/java/com/chaoran/entiry/Zujian.java index 6162126..39f8ac3 100644 --- a/app/src/main/java/com/chaoran/entiry/Zujian.java +++ b/app/src/main/java/com/chaoran/entiry/Zujian.java @@ -1,5 +1,6 @@ package com.chaoran.entiry; +import android.widget.ImageView; import android.widget.TextView; public class Zujian { diff --git a/app/src/main/java/com/chaoran/listener/ImageClickListener.java b/app/src/main/java/com/chaoran/listener/ImageClickListener.java index 18524a6..04a756a 100644 --- a/app/src/main/java/com/chaoran/listener/ImageClickListener.java +++ b/app/src/main/java/com/chaoran/listener/ImageClickListener.java @@ -1,19 +1,23 @@ package com.chaoran.listener; import android.app.Activity; +import android.graphics.Bitmap; import android.graphics.Color; +import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.view.Display; import android.view.Gravity; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; +import android.view.View.OnKeyListener; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.PopupWindow; import com.chaoran.entiry.SelfImage; -import com.activity.chaoran.R; +import com.example.chaoran.R; public class ImageClickListener implements OnClickListener { private Activity activity; diff --git a/app/src/main/java/com/chaoran/listener/PzClickListener.java b/app/src/main/java/com/chaoran/listener/PzClickListener.java index 14814f8..dfed85b 100644 --- a/app/src/main/java/com/chaoran/listener/PzClickListener.java +++ b/app/src/main/java/com/chaoran/listener/PzClickListener.java @@ -4,10 +4,11 @@ import java.io.File; import java.io.IOException; import com.chaoran.entiry.PhotographUi; -import com.activity.chaoran.DjActivity; +import com.example.chaoran.DjActivity; import com.util.DialogUtil; import com.util.SysUtil; +import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.provider.MediaStore; diff --git a/app/src/main/java/com/chaoran/lx/activity/DownDataActivity.java b/app/src/main/java/com/chaoran/lx/activity/DownDataActivity.java index 3e80fdd..9fd7947 100644 --- a/app/src/main/java/com/chaoran/lx/activity/DownDataActivity.java +++ b/app/src/main/java/com/chaoran/lx/activity/DownDataActivity.java @@ -4,13 +4,19 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Set; +import org.kobjects.base64.Base64; + import com.chaoran.component.ButAdapter; import com.chaoran.db.DBManager; import com.chaoran.lx.thread.LxDataDownThread; -import com.activity.chaoran.R; -import com.activity.chaoran.RunYmupThread; +import com.example.chaoran.R; +import com.example.chaoran.RunYmupThread; +import com.example.chaoran.R.id; +import com.example.chaoran.R.layout; import com.util.DialogUtil; +import com.util.IoUtil; +import android.R.integer; import android.os.Bundle; import android.os.Handler; import android.os.Message; diff --git a/app/src/main/java/com/chaoran/lx/activity/Lx_Param_Activity.java b/app/src/main/java/com/chaoran/lx/activity/Lx_Param_Activity.java index a355670..c6ebde4 100644 --- a/app/src/main/java/com/chaoran/lx/activity/Lx_Param_Activity.java +++ b/app/src/main/java/com/chaoran/lx/activity/Lx_Param_Activity.java @@ -10,7 +10,10 @@ import org.dom4j.DocumentException; import com.chaoran.entiry.DanJuEntity; import com.chaoran.entiry.Sys_DanJuFormsOptions; import com.chaoran.thread.DownDJRun; -import com.activity.chaoran.R; +import com.example.chaoran.DjActivity; +import com.example.chaoran.R; +import com.example.chaoran.R.layout; +import com.example.chaoran.R.menu; import com.util.DialogUtil; import com.util.IoUtil; import com.util.LxParamPageCreate; diff --git a/app/src/main/java/com/chaoran/lx/thread/LxDataDownThread.java b/app/src/main/java/com/chaoran/lx/thread/LxDataDownThread.java index 1e0c5ca..854340e 100644 --- a/app/src/main/java/com/chaoran/lx/thread/LxDataDownThread.java +++ b/app/src/main/java/com/chaoran/lx/thread/LxDataDownThread.java @@ -1,21 +1,25 @@ package com.chaoran.lx.thread; -import android.app.ProgressDialog; -import android.os.Handler; -import android.os.Message; -import android.widget.TextView; -import com.chaoran.db.DBManager; -import com.sys.SysData; -import com.util.IoUtil; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + import org.kobjects.base64.Base64; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; +import org.xmlpull.v1.XmlPullParserException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; +import com.chaoran.db.DBManager; +import com.sys.SysData; +import com.util.IoUtil; + +import android.app.ProgressDialog; +import android.os.Handler; +import android.os.Message; +import android.widget.TextView; public class LxDataDownThread implements Runnable { private Handler handler; diff --git a/app/src/main/java/com/chaoran/thread/UpdatePwdThread.java b/app/src/main/java/com/chaoran/thread/UpdatePwdThread.java index d5db2c5..edc069a 100644 --- a/app/src/main/java/com/chaoran/thread/UpdatePwdThread.java +++ b/app/src/main/java/com/chaoran/thread/UpdatePwdThread.java @@ -1,12 +1,17 @@ package com.chaoran.thread; -import android.os.Handler; -import android.os.Message; -import com.sys.SysData; +import java.io.IOException; + import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; +import org.xmlpull.v1.XmlPullParserException; + +import com.sys.SysData; + +import android.os.Handler; +import android.os.Message; public class UpdatePwdThread implements Runnable { private Handler handler; private String userid; diff --git a/app/src/main/java/com/cr5w/scan/CR5WScanControl.java b/app/src/main/java/com/cr5w/scan/CR5WScanControl.java index 7238646..70c0473 100644 --- a/app/src/main/java/com/cr5w/scan/CR5WScanControl.java +++ b/app/src/main/java/com/cr5w/scan/CR5WScanControl.java @@ -32,7 +32,9 @@ public class CR5WScanControl { } sleep(500); } +// init(context); } catch (Exception e) { + e.printStackTrace(); } } diff --git a/app/src/main/java/com/cr5w/scan/ScanHelper.java b/app/src/main/java/com/cr5w/scan/ScanHelper.java index 4440455..f67deb9 100644 --- a/app/src/main/java/com/cr5w/scan/ScanHelper.java +++ b/app/src/main/java/com/cr5w/scan/ScanHelper.java @@ -1,6 +1,10 @@ package com.cr5w.scan; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.Context; +import android.content.Intent; import android.provider.Settings; public class ScanHelper { /** scan settings show 0 : no; 1 : yes*/ diff --git a/app/src/main/java/com/cr5w/scan/aht70/ScanHelper.java b/app/src/main/java/com/cr5w/scan/aht70/ScanHelper.java index 02d7acb..c9d7bef 100644 --- a/app/src/main/java/com/cr5w/scan/aht70/ScanHelper.java +++ b/app/src/main/java/com/cr5w/scan/aht70/ScanHelper.java @@ -1,7 +1,11 @@ package com.cr5w.scan.aht70; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.Context; +import android.content.Intent; import android.provider.Settings; public class ScanHelper { /** scan settings show 0 : no; 1 : yes*/ diff --git a/app/src/main/java/com/device/zk_r322a/ZKR322AControl.java b/app/src/main/java/com/device/zk_r322a/ZKR322AControl.java index e2a1bb7..383f21d 100644 --- a/app/src/main/java/com/device/zk_r322a/ZKR322AControl.java +++ b/app/src/main/java/com/device/zk_r322a/ZKR322AControl.java @@ -1,24 +1,18 @@ package com.device.zk_r322a; +import android_serialport_api.SerialPort; + import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; - -import android.gpio.GpioJNI; -import android.util.Log; -import android_serialport_api.SerialPort; public class ZKR322AControl { private SerialPort mSerialPort = null; - private OutputStream mOutputStream = null; private InputStream mInputStream = null; - //private boolean readVal = false; public ZKR322AControl() throws SecurityException, IOException { - mSerialPort = new SerialPort(new File("/dev/ttyS4"), 115200, 8, 'N', 1,0); - mOutputStream = mSerialPort.getOutputStream(); - mInputStream = mSerialPort.getInputStream(); + mSerialPort = new SerialPort(new File("/dev/ttyS1"), 115200,0); + mInputStream = mSerialPort.getInputStream(); } public String getData() { @@ -37,19 +31,13 @@ public class ZKR322AControl { } public void start() { - //readVal = true; - // GpioJNI.gpio_switch_scan_trig(1); +// GpioJNI.gpio_switch_scan_trig(1); } public void stop() { - //readVal = false; - // GpioJNI.gpio_switch_scan_trig(0); +// GpioJNI.gpio_switch_scan_trig(0); } - //public boolean isRead() { - // return readVal; - //} - public void close() { if (mSerialPort != null) { mSerialPort.close(); @@ -58,7 +46,7 @@ public class ZKR322AControl { public void initScan() { - // GpioJNI.gpio_switch_scan_rf_ired(0); - // GpioJNI.gpio_switch_scan_power(1); +// GpioJNI.gpio_switch_scan_rf_ired(0); +// GpioJNI.gpio_switch_scan_power(1); } } diff --git a/app/src/main/java/com/example/chaoran/DjActivity.java b/app/src/main/java/com/example/chaoran/DjActivity.java new file mode 100644 index 0000000..72914b6 --- /dev/null +++ b/app/src/main/java/com/example/chaoran/DjActivity.java @@ -0,0 +1,1981 @@ +package com.example.chaoran; + +import android.app.AlertDialog; +import android.app.Instrumentation; +import android.app.ProgressDialog; +import android.app.TabActivity; +import android.content.*; +import android.content.DialogInterface.OnCancelListener; +import android.device.ScanManager; +import android.device.scanner.configuration.Triggering; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.MediaPlayer.OnCompletionListener; +import android.media.SoundPool; +import android.net.wifi.WifiManager; +import android.net.wifi.WifiManager.WifiLock; +import android.os.*; +import android.os.PowerManager.WakeLock; +import android.speech.tts.TextToSpeech; +import android.speech.tts.TextToSpeech.OnInitListener; +import android.util.Log; +import android.view.*; +import android.view.View.OnClickListener; +import android.view.ViewGroup.LayoutParams; +import android.view.inputmethod.InputMethodManager; +import android.widget.*; +import android.widget.AdapterView.OnItemClickListener; +import com.chaoran.component.ImageAdpter; +import com.chaoran.component.MyAdapter; +import com.chaoran.db.DBManager; +import com.chaoran.entiry.*; +import com.chaoran.listener.ImageClickListener; +import com.chaoran.listener.PzClickListener; +import com.chaoran.lx.thread.LxDJNrThread; +import com.chaoran.lx.thread.LxMenuQueryThread; +import com.chaoran.lx.thread.LxRunYmupThread; +import com.chaoran.thread.DownDJRun; +import com.cr5w.scan.CR5WScanControl; +import com.cr5w.scan.aht70.ScanHelper; +import com.device.zk_r322a.ZKR322AControl; +import com.honeywell.aidc.*; +import com.jiebao.h518.scan.BeepManager; +import com.jiebao.h518.scan.NewScanControler; +import com.lianxin.nr510.Engine; +import com.seuic.scan.SeuicScanKeyEventRunnable; +import com.seuic.scanner.DecodeInfo; +import com.seuic.scanner.DecodeInfoCallBack; +import com.seuic.scanner.ScannerFactory; +import com.seuic.scanner.ScannerKey; +import com.sys.SysData; +import com.util.*; +import com.vioce.TekVoiceEngine; +import com.vioce.VoiceEngine; +import org.kobjects.base64.Base64; +import org.ksoap2.SoapEnvelope; +import org.ksoap2.serialization.SoapObject; +import org.ksoap2.serialization.SoapSerializationEnvelope; +import org.ksoap2.transport.HttpTransportSE; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * 单据窗口 + */ +public class DjActivity extends TabActivity implements DecodeInfoCallBack, + BarcodeReader.BarcodeListener, + BarcodeReader.TriggerListener { + /* 振动 */ + public Vibrator vibrator; + /* 拍照用的属性 */ + public PhotographUi photographUi;// 当前拍照的组件 + public String pzImgPath;// 照相的图片路径 + + + public String phoneModel;// 电话类型 + public Map djInitMap = null; + public HashMap pageMap = new HashMap();// 页面参数 + public String mxTempTable;// 明细临时表 + public String mxSql;// 明细数据插入sql + private String mxQuerySql;// 明细查询sql + private String defaultFocus;// 初始化进入单据时的默认焦点 + private String defaultFocus2;// 初始化进入单据时的默认焦点 + private String nextFocusTag;// 下一个需要获得焦点组件Tag + private WakeLock wakeLock = null; + private WakeLock linghtScreen = null;// 点亮屏幕 + PowerManager pm = null; + private boolean isLinghtScreen = false; + private WifiLock wifiLock; + + + /* 菜单栏变量 */ + private AbsListView menuList; + private List menuData; + private BaseAdapter menuAdapter; + private String formlx; + private int currentDjId; + public ProgressDialog pd; + + public TabHost tabhost; + public TabHost hzTab; + public HashMap fangAMap = new HashMap();// 保存所有方案 + + + /* 明细内容 */ + private TextView mxTitle; + private ListView mxList; + public ArrayList mxData = new ArrayList(); + private MyAdapter mxAdapter; + private Button mxRefreshBut; + private int cur_pos = -1;// 当前选中的行 + + //科大讯飞语音引擎 + private VoiceEngine voiceEngine; + + + private MediaPlayer diPlayer = null; + private MediaPlayer duPlayer = null; + + public static View m_view = null; + + // 正在执行是否支持重复读取条形码 + private boolean reReadCode = true; + + /* 数据操作变量 */ + private DBManager dbManager; + private String ttsNr; + private OnCompletionListener completionListener = new OnCompletionListener() { + // @Override + public void onCompletion(MediaPlayer mp) { + if (ttsNr != null) { + if (voiceEngine != null) { + voiceEngine.startSpeaking(ttsNr); + } + ttsNr = null; + } + } + }; + /* 菜单栏查询 */ + Runnable menuRun = new Runnable() { + public void run() { + purview(); + } + }; + /* 显示网络图片Handler */ + public Handler imgHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == -1) { + DialogUtil.builder(DjActivity.this, "错误信息", "图片地址不正确", 0); + } else { + Map map = (Map) msg.obj; + ((SelfImage) map.get("image")).setBitmap((Bitmap) map.get("bitMap")); + } + } + + }; + /* 单据内容查询后更新页面 */ + private Handler handler = new Handler() { + @Override + // 当有消息发送出来的时候就执行Handler的这个方法 + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == -1) { + if (pd != null) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "初始化失败:" + msg.obj, 0); + } + } else { + Object initOb = msg.obj; + if (initOb instanceof Map) { + djInitMap = (Map) initOb; + createDj(1); + } else { + if (initOb.equals("0")) { + DialogUtil.builder(DjActivity.this, "提示信息", "PDA未注册!", 0); + } else if (initOb.equals("1")) { + DialogUtil.builder(DjActivity.this, "提示信息", "PDA还未授权使用!", 0); + } else if (initOb.equals("2")) { + DialogUtil.builder(DjActivity.this, "提示信息", "试用期已过!", 0); + } else if (initOb.equals("该模块未授权")) { + DialogUtil.builder(DjActivity.this, "提示信息", "该模块未授权!", 0); + } + pd.cancel(); + } + } + } + + }; + /* 菜单查询后更新页面 */ + private Handler menuHandler = new Handler() { + @Override + // 当有消息发送出来的时候就执行Handler的这个方法 + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == -1) { + DialogUtil.builder(DjActivity.this, "错误信息", "下载单据菜单失败!" + msg.obj, 0); + } else { + menuAdapter.notifyDataSetChanged(); + } + pd.cancel(); + } + + }; + private Handler sqlHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == -1) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "提取方案SQL失败!" + msg.obj, 0); + } else { + if (msg.arg1 == 0) { + try { + HashMap faMap = (HashMap) IoUtil.byte_obj((byte[]) msg.obj); + Map map = SqlUtil.regSql(faMap.get("sql").toString(), hzTab, pageMap); + pd.setMessage("正在执行检索方案"); + String audioFld = ""; + if (faMap.get("audioFld") != null) { + audioFld = faMap.get("audioFld").toString().toUpperCase(); + } + runSearch(map, faMap.get("return_one").toString(), audioFld); + } catch (Exception e) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "检索方案内容解析失败!", 0); + } + } else if (msg.arg1 == 1) { + String sql = null; + try { + sql = (String) IoUtil.byte_obj((byte[]) msg.obj); + } catch (Exception e) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "页面修改方案内容解析失败!", 0); + return; + } + Map map = SqlUtil.regSql(sql, hzTab, pageMap); + map.put("gzid", pageMap.get("GZID")); + map.put("mxTempTable", mxTempTable); + Map hzData = DjUtil.organizationHzData(hzTab, pageMap.get("GZID")); + hzData.putAll(pageMap); + map.put("hzData", hzData); + try { + byte[] b = IoUtil.getbyte(map); + String paramString = Base64.encode(b); + pd.setMessage("正在执行页面修改方案"); + runYmup(paramString); + } catch (Exception e) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "页面修改方案组织数据失败!", 0); + } + } else if (msg.arg1 == 2) {// 页面提取方案 + Djselefa djselefa = null; + try { + djselefa = (Djselefa) IoUtil.byte_obj((byte[]) msg.obj); + } catch (Exception e) { + e.printStackTrace(); + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "提取方案内容解析失败!", 0); + return; + } + HashMap map = SqlUtil.regSql(djselefa.getT_sql(), hzTab, pageMap); + pd.cancel(); + Intent intent = new Intent(); + djselefa.setT_sql(map.get("sql").toString()); + HashMap paramMap = new HashMap(); + paramMap.put("djselefa", djselefa); + paramMap.put("t_sqlParam", (HashMap) map.get("param")); + paramMap.put("mxTempTable", mxTempTable); + paramMap.put("GZID", pageMap.get("GZID")); + intent.putExtra("paramMap", paramMap); + intent.setClass(getApplicationContext(), DjtqActivity.class); + startActivityForResult(intent, 2); + } + } + } + }; + public Handler runHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + View rootview = DjActivity.this.getWindow().getDecorView(); + View aaa = rootview.findFocus(); + if (aaa instanceof SelfEditText) { + m_view = aaa; + SelfEditText set = (SelfEditText) aaa; + if (set.getText().length() > 0) + set.selectAll(); + } + if (msg.what == -1) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "检索方案执行失败:" + msg.obj.toString(), 0); + } else if (msg.what == -2) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "页面修改方案执行失败:" + msg.obj.toString(), 0); + WifiManager wifiManager = (WifiManager) DjActivity.this.getSystemService(Context.WIFI_SERVICE); + wifiManager.disconnect(); + wifiManager.reconnect(); + } else if (msg.what == -3) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "单据保存失败:" + msg.obj.toString(), 0); + } else if (msg.what == -4) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "单据退出失败:" + msg.obj.toString(), 0); + } else if (msg.what == -5) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "查询明细失败:" + msg.obj.toString(), 0); + } else { + if (msg.obj == null) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "方案执行失败!", 0); + } else { + if (msg.arg1 == 1) {// 检索方案 + Map map = (Map) msg.obj; + DataGrid dg = (DataGrid) map.get("dg"); + int len = dg.getTableData().size(); + if (len < 1) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "提示信息", "当前查询没有记录!", 0); + return; + } + String speakFld = (map.get("audioFld")).toString(); + if (map.get("return_one").equals("Y") && len < 2) { + Map paramValueMap = (Map) dg.getTableData().get(0); + play(paramValueMap, speakFld); + DjUtil.setUiValue(hzTab, paramValueMap, pageMap, imgHandler); + } else { + Intent intent = new Intent(); + intent.setClass(getApplicationContext(), ParamActivity.class); + intent.putExtra("dg", dg); + intent.putExtra("audioFld", speakFld); + startActivityForResult(intent, 1); + } + if (defaultFocus != null) { + DjUtil.setFocus(hzTab, defaultFocus); + defaultFocus = null; + } + pd.cancel(); + } else if (msg.arg1 == 2) {// 页面修改方案 + Object ob = msg.obj; + if (ob instanceof Map) { + Map map = (Map) ob; + List> list = (List>) map.get("hz"); + Map paramValueMap = new HashMap(); + for (Map tm : list) { + if ("MESSAGE_A".equals(tm.get(" fieldname"))) { + paramValueMap = tm; + } else if ("MESSAGE_AUDIO".equals(tm.get("fieldname"))) + paramValueMap = tm; + } + play(paramValueMap, "fieldValue"); + DjUtil.setUiValue(hzTab, (List) map.get("hz"), pageMap, imgHandler); + + if (map.get("msg") != null) { + String ymup_msg = map.get("msg").toString(); + if (ymup_msg.toUpperCase().indexOf("JUMP_") == 0) { + String ymup_msgs[] = ymup_msg.split("_"); + String newOpenDjFromlx = ymup_msgs[1].toUpperCase(); + int dj_no = -1; + int len = menuData.size(); + for (int i = 0; i < len; i++) { + Map tempMap = (Map) menuData.get(i); + String tempgn_no = tempMap.get("gn_no").toString().toUpperCase(); + if (newOpenDjFromlx.equals(tempgn_no)) { + dj_no = i; + break; + } + } + if (dj_no == -1) { + DialogUtil.builder(DjActivity.this, "提示信息", "当前操作员不具有" + newOpenDjFromlx + "单据操作权限!", 0); + } else { + tabhost.setCurrentTab(0); + currentDjId = dj_no; + DialogUtil.builderCancel(DjActivity.this, "提示", "是否退出该单据", okClick); + } + } else { + String returnMsg[] = map.get("msg").toString().split("@"); + int fontsize = 0; + if (returnMsg.length > 1) { + fontsize = Integer.parseInt(returnMsg[1]); + } + DialogUtil.builder(DjActivity.this, "提示信息", returnMsg[0], fontsize); + } + } + } else { + DialogUtil.builder(DjActivity.this, "提示信息", ob.toString(), 0); + } + pd.cancel(); + } else if (msg.arg1 == 3) { + String mess = msg.obj.toString(); + if (mess.substring(0, 2).equals("ok")) { + String djbh = mess.substring(2, mess.length()); + mxData.clear(); + mxAdapter.notifyDataSetChanged(); + hzTab.setCurrentTab(0); + hzTab.clearAllTabs(); + pageMap.clear(); + mxTempTable = null; + mxSql = null; + mxQuerySql = null; + createDj(0); + DialogUtil.builder(DjActivity.this, "提示信息", "单据保存成功\n单据编号:".concat(djbh), 0); + } else { + DialogUtil.builder(DjActivity.this, "提示信息", mess, 0); + } + pd.cancel(); + } else if (msg.arg1 == 4) { + if (tabhost.getCurrentTab() != 0) { + hzTab.clearAllTabs(); + mxData.clear(); + fangAMap.clear(); + djInitMap.clear(); + djInitMap = null; + pageMap.clear(); + mxTempTable = null; + mxSql = null; + mxQuerySql = null; + formlx = null; + pd.cancel(); + tabhost.setCurrentTab(0); + } else { + pd.cancel(); + openNewDj(); + } + } else if (msg.arg1 == 5) { + mxData.clear(); + try { + byte[] bb = Base64.decode(msg.obj.toString()); + mxData.addAll((List) IoUtil.byte_obj(bb)); + } catch (Exception e) { + DialogUtil.builder(DjActivity.this, "提示信息", "数据转换失败", 0); + } + mxAdapter.notifyDataSetChanged(); + pd.cancel(); + } + } + + } + if (nextFocusTag != null) { + setNextFocus(nextFocusTag); + nextFocusTag = null; + } + if (isLinghtScreen) { + releaseLinghtScreen(); + } + if (newScanControler != null) { + newScanControler.scanOnce();// 如果PDA是ht518 则一进入单据就打开扫描 + } + if (seuicScanner != null && islxscan.equals("0")) { + seuicScanner.startScan(); + } + + if (androidHandheldTerminal0 != null) { + androidHandheldTerminal0.start(); + } + if (cr5wScanControl != null) + cr5wScanControl.start(DjActivity.this); + if (androidHandheldTerminal != null) + androidHandheldTerminal.start(); + if (nr510ScanControl != null) + nr510ScanControl.start(DjActivity.this); + if (uroBoScannerControl != null) { + uroBoScannerControl.start(); + } + if (barcodeReader != null) { + continuousScanning(true); + } + if (zkr322aControl != null) { + zkr322aControl.start(); + } + if (haixinN1SDemoReceiver != null) { + haixinN1sStart(); + } + reReadCode = true; + } + }; + /* 事件 */ + public OnFocusChangeEvent focusEvent; + public OnClickEvent clickEvent; + public PzClickListener pzClickEvent;// 拍照事件 + public ImageClickListener imgClickEvent; + + private void createDj(int ty) { + if (ty == 1) {// 为0表示保存后新开单据 + fangAMap.clear(); + if (!SysData.is_lx) { + DjUtil.assembleFangA(fangAMap, (ArrayList) djInitMap.get("searchList")); + DjUtil.assembleFangA(fangAMap, (ArrayList) djInitMap.get("ymupList")); + DjUtil.assembleFangA(fangAMap, (ArrayList) djInitMap.get("djtqList")); + djInitMap.remove("searchList"); + djInitMap.remove("ymupList"); + djInitMap.remove("djtqList"); + } else { + fangAMap = (HashMap) djInitMap.get("fangAMap"); + djInitMap.remove("fangAMap"); + } + } + Sys_DanJuFormsOptions danju = (Sys_DanJuFormsOptions) djInitMap.get("danju"); + ByteArrayInputStream in = null; + try { + DanJuEntity dj = (DanJuEntity) IoUtil.byte_obj2(danju.getFORM()); + if (SysData.is_lx) {// 如果是离线单据就在PDA上生成临时表 + String tableName = "CR_DJBS_".concat(danju.getFORMbs()).concat(formlx); + String createMxTableSql = "create table ".concat(tableName).concat("(gzid char(11),dj_sn int null default 0,"); + HashMap mxFiledMap = null; + for (int i = 0; i < dj.mxzdArray.size(); i++) { + mxFiledMap = (HashMap) dj.mxzdArray.get(i); + createMxTableSql = createMxTableSql.concat(mxFiledMap.get("fdname").toString()); + String fdtype = mxFiledMap.get("fdtype").toString(); + if (fdtype.equals("字符")) { + createMxTableSql = createMxTableSql.concat("varchar (").concat(mxFiledMap.get("fdsize").toString()).concat(") null default '',"); + } else if (fdtype.equals("整型") || fdtype.equals("整数")) { + createMxTableSql = createMxTableSql.concat(" int null default 0,"); + } else if (fdtype.equals("时间")) { + createMxTableSql = createMxTableSql.concat(" datetime null ,"); + } else if (fdtype.equals("位图") || fdtype.equals("二进")) { + createMxTableSql = createMxTableSql.concat(" blob null ,"); + } else if (fdtype.equals("文本")) { + createMxTableSql = createMxTableSql.concat(" text ,"); + } else if (fdtype.equals("实数")) { + createMxTableSql = createMxTableSql.concat(" decimal(").concat(mxFiledMap.get("fdsize").toString()).concat(",") + .concat(mxFiledMap.get("fddec").toString()).concat(") null default 0 ,"); + } + } + createMxTableSql = createMxTableSql.concat(" CONSTRAINT cr_").concat(danju.getFORMbs()).concat("_").concat(formlx) + .concat("_PK PRIMARY KEY (gzid,dj_sn))"); + if (dbManager.existsTable(tableName) > 0) { + dbManager.exeSql("drop table ".concat(tableName)); + } + dbManager.exeSql(createMxTableSql); + } + String[] arrs = dj.pageNr.split("\\^"); + if (arrs.length > 1) { + dj.pageNr = arrs[0]; + } + in = new ByteArrayInputStream(dj.pageNr.getBytes()); + pageMap.put("RQ", djInitMap.get("RQ").toString()); + Dom4jUtil.testParseXMLData(in, DjActivity.this); + if (dj.mxzdArray.size() > 0) { + mxTitle.setText(((Map) dj.mxzdArray.get(0)).get("chnname").toString().trim()); + if (mxAdapter != null) { + mxAdapter.clear(); + } + mxAdapter = new MyAdapter(DjActivity.this, mxData, ((Map) dj.mxzdArray.get(0)).get("fdname").toString().trim().toUpperCase()); + mxList.setAdapter(mxAdapter); + } + mxTempTable = "CR_DJBS_".concat(danju.getFORMbs()).concat(formlx); + mxSql = DjUtil.createMxSql(dj.mxzdArray, mxTempTable); + mxQuerySql = DjUtil.createMxQuerySql(dj.mxzdArray, mxTempTable); + if (mxQuerySql == null) { + mxRefreshBut.setEnabled(false); + mxTempTable = null; + } else { + mxRefreshBut.setEnabled(true); + } + pageMap.put("GZID", djInitMap.get("GZID").toString().trim()); + pageMap.put("DJLX", formlx); + pageMap.put("DJBH", danju.getFORMbs().trim().concat("草")); + pageMap.put("DJBS", danju.getFORMbs().trim()); + pageMap.put("RQ", djInitMap.get("RQ").toString()); + pageMap.put("ONTIME", djInitMap.get("ONTIME").toString()); + pageMap.put("JIGID", SysData.jigid); + pageMap.put("ZHIYID", SysData.userid); + pageMap.put("USERID", SysData.userid); + pageMap.put("USERNAME", SysData.lgnname); + pageMap.put("CLIENTID", SysData.clientid); + DjUtil.setUiValue2(hzTab, pageMap, imgHandler); + String newDjInit = null; + if (dj.fangAtyjkVO != null) { + newDjInit = dj.fangAtyjkVO.newDjInit.trim(); + } + if (newDjInit != null && newDjInit.length() > 0) { + defaultFocus = danju.getDefaultFouseField(); + defaultFocus2 = defaultFocus; + eventHandler(newDjInit, null); + } else { + defaultFocus2 = danju.getDefaultFouseField(); + DjUtil.setFocus(hzTab, danju.getDefaultFouseField()); + } + pd.cancel(); + } catch (Exception e) { + e.printStackTrace(); + DialogUtil.builder(this, "错误信息", "生成单据页面失败!" + e.toString(), 0); + pd.cancel(); + } finally { + try { + if (in != null) { + in.close(); + in = null; + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public DialogInterface.OnClickListener okClick = new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + new DjMenuFun().exitDj(DjActivity.this); + } + }; + public DialogInterface.OnClickListener cancelClick = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + } + }; + + public void queryMx(View v) { + if (mxQuerySql == null) { + return; + } + DialogUtil.setDialog(pd, "正在查询单据内容", "正在查询明细……"); + new ExitThread(pageMap.get("GZID"), mxQuerySql, runHandler, "queryMx").start(); + } + + public void openNewDj() { + if (SysData.is_lx) { + if (dbManager.existsTable("sys_DanJuFormsOptions".toUpperCase()) < 1) { + DialogUtil.builder(DjActivity.this, "提示信息", "请下载单据表", 0); + return; + } + } + DialogUtil.setDialog(pd, "正在查询单据内容", "正在下载……"); + Map map = (Map) menuData.get(currentDjId); + formlx = map.get("gn_no").toString(); + mxData.clear(); + pageMap.clear(); + if (djInitMap != null) { + djInitMap.clear(); + djInitMap = null; + } + fangAMap.clear(); + mxTempTable = null; + mxSql = null; + tabhost.setCurrentTab(1); + hzTab.clearAllTabs(); + if (SysData.is_lx) { + new Thread(new LxDJNrThread(dbManager, handler, formlx)).start(); + } else { + new Thread(new DownDJRun(formlx, handler)).start(); + } + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_dj); + if (SysData.url != null) { + this.setTitle(SysData.no + " " + SysData.url.substring(SysData.url.indexOf("//") + 2, 24)); + } + focusEvent = new OnFocusChangeEvent(); + clickEvent = new OnClickEvent(); + imgClickEvent = new ImageClickListener(this); + pzClickEvent = new PzClickListener(this); + //语音合成引擎初始化 + voiceEngine = new TekVoiceEngine(this); + mxRefreshBut = (Button) findViewById(R.id.mxbut); + pd = ProgressDialog.show(DjActivity.this, "正在查询单据菜单", "正在下载……"); + pd.setOnCancelListener(new OnCancelListener() { + + @Override + public void onCancel(DialogInterface dialog) { + if (m_view != null) { + if (m_view instanceof SelfEditText) { + ((SelfEditText) m_view).selectAll(); + } + m_view = null; + } + } + }); + menuData = new ArrayList(); + if (SysData.is_lx) { + dbManager = new DBManager(this); + new Thread(new LxMenuQueryThread(dbManager, menuHandler, menuData)).start(); + } else { + new Thread(menuRun).start();// 查询单据菜单 + } + tabhost = getTabHost(); + tabhost.addTab(tabhost.newTabSpec("djmenu").setIndicator("菜单").setContent(R.id.djmenu)); + tabhost.addTab(tabhost.newTabSpec("hz").setIndicator("汇总").setContent(R.id.hz)); + tabhost.addTab(tabhost.newTabSpec("mx").setIndicator("明细").setContent(R.id.mx)); + TabWidget tabwidget = tabhost.getTabWidget(); + setTabwidgetAtt(tabwidget); + Intent intent = getIntent(); + String displaymode = intent.getStringExtra("displaymode"); + islxscan = intent.getStringExtra("islxscan"); + if (displaymode.equals("grid")) { + menuAdapter = new ImageAdpter(menuData, this); + menuList = new GridView(this); + GridView gv = (GridView) menuList; + gv.setNumColumns(3); + gv.setVerticalSpacing(20); + ((AdapterView) menuList).setAdapter(menuAdapter); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); + layoutParams.topMargin = 0; + layoutParams.leftMargin = 0; + ((LinearLayout) findViewById(R.id.djmenu)).addView(menuList, layoutParams); + } else { + menuAdapter = new SimpleAdapter(this, menuData, R.layout.activity_menu, new String[]{"mname"}, new int[]{R.id.title}); + // menuList = (ListView) findViewById(R.id.munuList); + menuList = new ListView(this); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); + layoutParams.topMargin = 0; + layoutParams.leftMargin = 0; + ((LinearLayout) findViewById(R.id.djmenu)).addView(menuList, layoutParams); + ((AdapterView) menuList).setAdapter(menuAdapter); + } + OnItemClickListener lis1 = new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + if (formlx != null) { + currentDjId = arg2; + DialogUtil.builderCancel(DjActivity.this, "提示", "是否退出该单据", okClick); + } else { + currentDjId = arg2; + openNewDj(); + } + } + }; + menuList.setOnItemClickListener(lis1); + + hzTab = (TabHost) findViewById(R.id.hz); + hzTab.setup(); + mxTitle = (TextView) findViewById(R.id.mxtitle); + mxList = (ListView) findViewById(R.id.mxlist); + mxList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// 一定要设置这个属性,否则ListView不会刷新 + mxList.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView arg0, View arg1, int position, long id) { + cur_pos = position;// 更新当前行 + mxAdapter.cur_pos = cur_pos; + } + }); + + tabhost.getTabWidget().getChildAt(2).setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + ((Button) findViewById(R.id.mxbut)).performClick(); + tabhost.setCurrentTab(2); + } + }); + + tabhost.getTabWidget().getChildAt(1).setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + tabhost.setCurrentTab(1); + if (defaultFocus2 != null) { + DjUtil.setFocus(hzTab, defaultFocus2); + } + } + }); + + phoneModel = android.os.Build.MODEL.toLowerCase(); + if (phoneModel.equals("zk-r322a") || phoneModel.equals("zk-r322") || phoneModel.equals("zk-r323") || phoneModel.equals("zk-r323a")) { + zkr322aNew(); + }/* else if (phoneModel.equals("n1s")) { + haixinN1SInit(); + } */ else if (phoneModel.equals("ht518")) { + // ht518Init(); + ht518InitNew(); + } else if (phoneModel.equals("al9")) { + seuicIint(); + } else if ("cr-5w".equals(phoneModel)) { + cr5wScanControl = new CR5WScanControl(); + cr5wScanControl.init(DjActivity.this); + } else if ("android handheld terminal".equals(phoneModel)) { + androidHandheldTerminal0 = new AndroidHandheldTerminal0(DjActivity.this); + //androidHandheldTerminal = new AndroidHandheldTerminal(); + } else if ("nr510".equals(phoneModel) || "android".equals(phoneModel)) { + nr510ScanControl = new Nr510ScanControl(); + } else if ("i6200series".equals(phoneModel)) { + uroBoScannerControl = new UroBoScannerControl(); + } else if ("scanpal eda50".equals(phoneModel)) { + barcodeReader = MainActivity.getBarcodeObject(); + + if (barcodeReader != null) { + + // register bar code event listener + barcodeReader.addBarcodeListener(this); + + // set the trigger mode to client control + try { + barcodeReader.setProperty(BarcodeReader.PROPERTY_TRIGGER_CONTROL_MODE, + BarcodeReader.TRIGGER_CONTROL_MODE_CLIENT_CONTROL); + + } catch (UnsupportedPropertyException e) { + Toast.makeText(this, "Failed to apply properties", Toast.LENGTH_SHORT).show(); + } + // register trigger state change listener + barcodeReader.addTriggerListener(this); + + Map properties = new HashMap(); + properties.put(BarcodeReader.PROPERTY_CODE_128_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_GS1_128_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_QR_CODE_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_CODE_39_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_DATAMATRIX_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_UPC_A_ENABLE, true); + properties.put(BarcodeReader.PROPERTY_EAN_13_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_AZTEC_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_CODABAR_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_INTERLEAVED_25_ENABLED, true); + properties.put(BarcodeReader.PROPERTY_PDF_417_ENABLED, true); + // Set Max Code 39 barcode length + properties.put(BarcodeReader.PROPERTY_CODE_39_MAXIMUM_LENGTH, 10); + // Turn on center decoding + properties.put(BarcodeReader.PROPERTY_CENTER_DECODE, true); + // Enable bad read response + properties.put(BarcodeReader.PROPERTY_NOTIFICATION_BAD_READ_ENABLED, false); + properties.put(BarcodeReader.PROPERTY_EAN_13_CHECK_DIGIT_TRANSMIT_ENABLED, true); + // Apply the settings + barcodeReader.setProperties(properties); + } + try { + barcodeReader.claim(); + } catch (ScannerUnavailableException e) { + e.printStackTrace(); + Toast.makeText(this, "Scanner unavailable", Toast.LENGTH_SHORT).show(); + } + } + acquireWakeLock(); + WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); + wifiLock = wifiManager.createWifiLock("crtechWIFI"); + wifiLock.acquire(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 1) { + if (resultCode == 1) { + Map map = (Map) data.getSerializableExtra("param"); + String speakFld = data.getSerializableExtra("audioFld").toString(); + if (voiceEngine != null) { + play(map, speakFld); + } + DjUtil.setUiValue(hzTab, map, pageMap, imgHandler); + } + } else if (requestCode == 2) { + if (resultCode == 2) { + DjUtil.setUiValue(hzTab, (HashMap) data.getSerializableExtra("param"), pageMap, imgHandler); + if (nextFocusTag != null) { + setNextFocus(nextFocusTag); + nextFocusTag = null; + } + } + } else if (requestCode == 3) { + if (resultCode == 3) { + HashMap tempmap = (HashMap) data.getSerializableExtra("param"); + DjUtil.setUiValue(hzTab, tempmap, pageMap, imgHandler); + } + } else if (requestCode == 4) { + View view = null; + if (data != null) { + String uiId = data.getExtras().getString("uiId"); + view = hzTab.findViewWithTag(uiId.toUpperCase()); + if (view != null && view instanceof EditText) { + view.requestFocus(); + ((EditText) view).setText(data.getExtras().getString("tm")); + } + } + if (nextFocusTag != null) { + if (view != null) { + view.clearFocus(); + } + setNextFocus(nextFocusTag); + nextFocusTag = null; + } + } + if (requestCode == 8888) { + Bitmap bitmap = BitmapFactory.decodeFile(pzImgPath, null); + photographUi.setImageBitmap(bitmap); + } + } + + public void setTabwidgetAtt(TabWidget tabwidget) { + for (int i = 0; i < tabwidget.getChildCount(); i++) { + // 设置页签高度和页签内字体属性 + TextView tv = (TextView) tabwidget.getChildAt(i).findViewById(android.R.id.title); + tabwidget.getChildAt(i).getLayoutParams().height = UnitConversionUtil.convertDIP2PX(20.0); + tv.setTextColor(Color.WHITE); + tv.setGravity(Gravity.CENTER_HORIZONTAL); + } + } + + public void purview() { + try { + String url = SysData.url + "/webservice/ServiceInterface?wsdl"; + String method = "selectAndroidPurview"; + SoapObject rpc = new SoapObject("", method); + rpc.addProperty("userid", SysData.userid); + HttpTransportSE ht = new HttpTransportSE(url, SysData.timeout); + ht.debug = true; + SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); + envelope.bodyOut = rpc; + envelope.dotNet = true; + envelope.setOutputSoapObject(rpc); + ht.call("", envelope); + if (envelope.getResponse() != null) { + byte[] bb = Base64.decode(envelope.getResponse().toString()); + List list = (List) IoUtil.byte_obj(bb); + menuData.addAll(list); + Message message = new Message(); + menuHandler.sendMessage(message); + } + } catch (Exception e) { + Message message = new Message(); + message.what = -1; + message.obj = e.toString(); + menuHandler.sendMessage(message); + } + } + + @Override + protected void onResume() { + super.onResume(); + if (cr5wScanControl != null) + cr5wScanControl.start(DjActivity.this); + else if (androidHandheldTerminal != null) + androidHandheldTerminal.start(); + else if (nr510ScanControl != null) + nr510ScanControl.start(DjActivity.this); + else if (androidHandheldTerminal0 != null) { + androidHandheldTerminal0.start(); + } else if (haixinN1SDemoReceiver != null) { + haixinN1sStart(); + } else if (uroBoScannerControl != null) { + uroBoScannerControl.start(); + } + if (seuicScanner != null) {// seuic PDA操作 + boolean b = seuicScanner.open(); + seuicScanner.setDecodeInfoCallBack(this); + } + if (barcodeReader != null) { + continuousScanning(true); + } + if (zkr322aControl != null) { + zkr322aControl.start(); + } + reReadCode = true; + //装载语音引擎参数 + voiceEngine.loadParam(); + } + + @Override + protected void onStart() { + super.onStart(); + if (newScanControler != null) { + newScanControler.scanOnce(); + } else if (seuicScanner != null) { + seuicScanner.setDecodeInfoCallBack(this); + seuicScanner.open(); + } else if (cr5wScanControl != null) + cr5wScanControl.start(DjActivity.this); + else if (uroBoScannerControl != null) { + uroBoScannerControl.start(); + } else if (nr510ScanControl != null) + nr510ScanControl.start(DjActivity.this); + else if (androidHandheldTerminal != null) + androidHandheldTerminal.start(); + else if (barcodeReader != null) + continuousScanning(true); + else if (haixinN1SDemoReceiver != null) { + haixinN1sStart(); + } + if (zkr322aControl != null) { + zkr322aControl.start(); + } + reReadCode = true; + } + + @Override + protected void onPause() { + super.onPause(); + if (newScanControler != null) { + newScanControler.stopScan(); + } else if (cr5wScanControl != null) + cr5wScanControl.stop(DjActivity.this); + else if (nr510ScanControl != null) + nr510ScanControl.stop(DjActivity.this); + else if (androidHandheldTerminal != null) + androidHandheldTerminal.stop(); + else if (androidHandheldTerminal0 != null) { + androidHandheldTerminal0.stop(); + } else if (haixinN1SDemoReceiver != null) { + haixinN1sStop(); + } else if (uroBoScannerControl != null) { + uroBoScannerControl.stop(); + } + if (seuicScanner != null) { + seuicScanner.stopScan(); + seuicScanner.close(); + seuicScanner.setDecodeCallBack(null); + } + if (barcodeReader != null) { + continuousScanning(false); + } + if (zkr322aControl != null) { + zkr322aControl.stop(); + } + } + + @Override + protected void onStop() { + super.onStop(); + } + + public void onDestroy() { + super.onDestroy(); + + + if (barcodeReader != null) { + barcodeReader.release(); + // unregister barcode event listener + barcodeReader.removeBarcodeListener(this); + + // unregister trigger state change listener + barcodeReader.removeTriggerListener(this); + barcodeReader = null; + } + + if (diPlayer != null) { + diPlayer.stop(); + diPlayer.release(); + diPlayer = null; + } + if (duPlayer != null) { + duPlayer.stop(); + duPlayer.release(); + duPlayer = null; + } + if (vibrator != null) { + vibrator.cancel(); + } + completionListener = null; + + + } + + private void exitClear() { + if (dbManager != null) { + dbManager.closeDB(); + dbManager = null; + } + if (djInitMap != null) { + djInitMap.clear(); + djInitMap = null; + } + fangAMap.clear(); + fangAMap = null; + pageMap.clear(); + pageMap = null; + if (menuList != null) { + menuList = null; + } + if (menuAdapter != null) { + menuAdapter = null; + } + if (menuData != null) { + menuData.clear(); + menuData = null; + } + if (menuAdapter != null) { + menuAdapter = null; + } + if (mxList != null) { + mxList = null; + } + mxData.clear(); + mxData = null; + if (mxAdapter != null) { + mxAdapter.clear(); + mxAdapter = null; + } + releaseWakeLock(); + linghtScreen = null; + wifiLock.release(); + wifiLock = null; + if (pm != null) { + pm = null; + } + if (voiceEngine != null) { + voiceEngine.stopSpeaking(); + } + if (phoneModel.equals("ht518")) { + ht518Clear(); + } + if (zkr322aControl != null) { + zkr322aClear(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.activity_dj, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + super.onOptionsItemSelected(item); + switch (item.getItemId()) { + case R.id.updatePwd: { + Intent intent = new Intent(); + intent.setClass(getApplicationContext(), UpdatePwdActivity.class); + startActivity(intent); + break; + } + case R.id.voice_setting: { + Intent intent = new Intent(); + intent.setClass(this, VoiceSettingActivity.class); + startActivity(intent); + break; + } + } + return true; + } + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + if (!isKeyDown) { + isKeyDown = true; + } + return super.onKeyUp(keyCode, event); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + super.onKeyDown(keyCode, event); + String temp = String.valueOf(keyCode); + if (temp.equals("132")) { + event.startTracking(); + return true; + } + if (seuicScanner != null && temp.equals("0") && isKeyDown) { + seuicScanner.startScan(); + isKeyDown = false; + return true; + } + return super.onKeyDown(keyCode, event); + } + + private boolean isCurrentFocus_EditText() { + View view = DjActivity.this.getCurrentFocus(); + if (view != null && view instanceof EditText) { + return true; + } else { + return false; + } + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + int keyCode = event.getKeyCode(); + if (event.getAction() == KeyEvent.ACTION_DOWN) { + switch (keyCode) { + case 120: + break; + case 211: + break; + case 212: + break; + case 113: + View view = DjActivity.this.getCurrentFocus(); + if (view != null && view instanceof EditText) { + setFcous(view); + } + break; + case KeyEvent.KEYCODE_BACK: + dialog(); + break; + case KeyEvent.KEYCODE_ENTER: + View view1 = DjActivity.this.getCurrentFocus(); + if (view1 != null && view1 instanceof EditText) { + setFcous(view1); + } + break; + case 132: + if (newScanControler != null) { + newScanControler.scanOnce(); + } + break; + case 510: + if (nr510ScanControl != null) { + nr510ScanControl.start(DjActivity.this); + } + break; + default: + return super.dispatchKeyEvent(event); + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (keyCode == 120 || keyCode == 211 || keyCode == 212) { + } else if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { // 阻止系统的enter事件 + return true; + } + } + return super.dispatchKeyEvent(event); + } + + public boolean onKeyLongPress(int keyCode, KeyEvent event) { + super.onKeyLongPress(keyCode, event); + String temp = String.valueOf(keyCode); + if (temp.equals("132")) { + } + return true; + } + + protected void dialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(DjActivity.this); + builder.setMessage("确定要退出吗?"); + builder.setTitle("提示"); + builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (pageMap.containsKey("GZID")) { + new ExitThread(pageMap.get("GZID"), mxTempTable, null, "clearDj").start(); + } + dialog.cancel(); + DjActivity.this.finish(); + exitClear(); + } + }); + builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + builder.create().show(); + } + + class OnFocusChangeEvent implements View.OnFocusChangeListener { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) { + if (v instanceof SelfEditText) { + SelfEditText focusInSet = (SelfEditText) v; + if (focusInSet.closeKeyBoard) { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(focusInSet.getWindowToken(), 0); + } + if (focusInSet.isTextChange) { + focusInSet.isTextChange = false; + } + focusInSet.selectAll(); + eventHandler(focusInSet.focusInFun, v); + } + } else { + if (v instanceof SelfEditText) { + SelfEditText set = (SelfEditText) v; + if (set.isTextChange) { + nextFocusTag = set.nextFocus; + eventHandler(((SelfEditText) v).focusOutFun, v); + } + } + } + } + } + + class OnClickEvent implements OnClickListener { + + @Override + public void onClick(View v) { + View view = DjActivity.this.getCurrentFocus(); + if (view instanceof SelfEditText) { + if (((SelfEditText) view).isTextChange) { + DjActivity.this.hzTab.requestFocus(); + return; + } + } + SelfButton selfBut = (SelfButton) v; + nextFocusTag = selfBut.nextFocus; + eventHandler(selfBut.clickFun, null); + } + + } + + public void openRunWin() { + DialogUtil.builder(DjActivity.this, "提示信息", "PDA不兼容", 0); + } + + public void eventHandler(String funName, View view) { + if (!SysData.isreg.equals("Y")) { + openRunWin(); + } + if (funName == null) { + return; + } + funName = funName.trim(); + if (funName.length() < 1) { + return; + } + String funType = ""; + String functionname = null; + if (funName.indexOf("_") > -1) { + funType = funName.substring(0, funName.indexOf("_")).toUpperCase(); + } + HashMap faMap = (HashMap) fangAMap.get(funName.toUpperCase()); + if (faMap == null && (funType.equals("SEARCH") || funType.equals("YMUP") || funType.equals("DJTQ"))) { + DialogUtil.builder(DjActivity.this, "错误信息", "方案不存在!", 0); + return; + } + if (funType.equals("SEARCH")) {// 检索方案函数 + if (cr5wScanControl != null) + cr5wScanControl.stop(DjActivity.this); + else if (androidHandheldTerminal != null) + androidHandheldTerminal.stop(); + else if (nr510ScanControl != null) + nr510ScanControl.stop(DjActivity.this); + else if (haixinN1SDemoReceiver != null) { + haixinN1sStop(); + } else if (uroBoScannerControl != null) { + uroBoScannerControl.stop(); + } + if (barcodeReader != null) { + } + if (zkr322aControl != null) { + zkr322aControl.stop(); + } + DialogUtil.setDialog(pd, "检索方案", "正在执行检索方案……"); + Map map = SqlUtil.regSql(faMap.get("zdysql").toString(), hzTab, pageMap); + String audioFld = ""; + if (faMap.get("audioFld") != null) { + audioFld = faMap.get("audioFld").toString().toUpperCase(); + } + runSearch(map, faMap.get("return_one").toString(), audioFld); + } else if (funType.equals("YMUP")) {// 页面修改函数 + if (cr5wScanControl != null) + cr5wScanControl.stop(DjActivity.this); + else if (nr510ScanControl != null) + nr510ScanControl.stop(DjActivity.this); + else if (androidHandheldTerminal != null) + androidHandheldTerminal.stop(); + else if (haixinN1SDemoReceiver != null) { + haixinN1sStop(); + } else if (uroBoScannerControl != null) { + uroBoScannerControl.stop(); + } + if (barcodeReader != null) { + } + if (zkr322aControl != null) { + zkr322aControl.stop(); + } + DialogUtil.setDialog(pd, "页面修改方案", "正在执行页面修改方案"); + Map map = SqlUtil.regSql(faMap.get("zdysql").toString(), hzTab, pageMap); + map.put("gzid", pageMap.get("GZID")); + map.put("mxTempTable", mxTempTable); + Map hzData = DjUtil.organizationHzData(hzTab, pageMap.get("GZID")); + ((HashMap) hzData.get("hzData")).putAll(pageMap); + map.put("hzData", hzData); + try { + if (!SysData.is_lx) { + byte[] b = IoUtil.getbyte(map); + String paramString = Base64.encode(b); + runYmup(paramString); + } else { + new Thread(new LxRunYmupThread(dbManager, faMap.get("zdysql").toString(), (Map) hzData.get("hzData"), runHandler)).start(); + } + } catch (Exception e) { + pd.cancel(); + DialogUtil.builder(DjActivity.this, "错误信息", "页面修改方案组织数据失败!", 0); + } + } else if (funType.equals("DJTQ")) { + DialogUtil.setDialog(pd, "提取方案", "加载提取方案函数……"); + Djselefa djselefa = new Djselefa(); + djselefa.setT_sql(faMap.get("t_sql").toString()); + djselefa.setHz_sql(faMap.get("hz_sql").toString()); + djselefa.setMx_sql(faMap.get("mx_sql").toString()); + djselefa.setFangamch(faMap.get("fangamch").toString()); + HashMap map = SqlUtil.regSql(djselefa.getT_sql(), hzTab, pageMap); + pd.cancel(); + Intent intent = new Intent(); + djselefa.setT_sql(map.get("sql").toString()); + HashMap paramMap = new HashMap(); + paramMap.put("djselefa", djselefa); + paramMap.put("t_sqlParam", (HashMap) map.get("param")); + paramMap.put("mxTempTable", mxTempTable); + paramMap.put("GZID", pageMap.get("GZID")); + intent.putExtra("paramMap", paramMap); + intent.setClass(getApplicationContext(), DjtqActivity.class); + startActivityForResult(intent, 2); + } else { + DjMenuFun menufun = new DjMenuFun(); + Class cla = menufun.getClass(); + Method method = null; + try { + if (funName.substring(0, 1).equals("M")) { + method = cla.getDeclaredMethod(funName, DjActivity.class); + method.invoke(menufun, DjActivity.this); + } else if (funName.substring(0, 4).toUpperCase().equals("SCAN")) { + method = cla.getDeclaredMethod(funName.substring(0, 4), DjActivity.class, String.class); + method.invoke(menufun, DjActivity.this, funName); + } else { + method = cla.getDeclaredMethod(funName); + if (method != null && view instanceof EditText) { + ((EditText) view).setText(method.invoke(menufun).toString()); + } + } + } catch (Exception e) { + DialogUtil.builder(DjActivity.this, "系统错误", "生成函数失败", 0); + e.printStackTrace(); + } + } + } + + /* 运行检索方案 */ + public void runSearch(Map map, String return_one, String audioFld) { + try { + new RunSearchThread(map.get("sql").toString(), IoUtil.ob_base64(map.get("param")), runHandler, return_one, audioFld).start(); + } catch (IOException e) { + DialogUtil.builder(this, "错误信息", "转换成Base64编码失败!", 0); + } + } + + /* 运行页面修改过方案 */ + public void runYmup(String param) { + new RunYmupThread(param, runHandler, "runYmup", 0).start(); + } + + public void play(Map map, String speakFld) { + if (map.containsKey(speakFld)) { + String speakNr = map.get(speakFld).toString(); + int isZd = 0; + if (speakNr.indexOf("退药") > -1 || speakNr.indexOf("批次错误") > -1) { + if (diPlayer == null) { + diPlayer = MediaPlayer.create(this, R.raw.didi); + diPlayer.setOnCompletionListener(completionListener); + } + ttsNr = map.get(speakFld).toString(); + diPlayer.start(); + } else if (speakNr.indexOf("错误") > -1) { + if (duPlayer == null) { + duPlayer = MediaPlayer.create(this, R.raw.dudu); + duPlayer.setOnCompletionListener(completionListener); + } + ttsNr = map.get(speakFld).toString(); + duPlayer.start(); + } else { + isZd = 1; + if (voiceEngine != null) { + voiceEngine.startSpeaking(map.get(speakFld).toString()); + } + } + if (isZd == 0) { + if (vibrator == null) { + vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); + } + vibrator.vibrate(2000); + } + } + + } + + private void setFcous(View view) { + ((EditText) view).clearFocus(); + setNextFocus(((SelfEditText) view).nextFocus); + } + + private void setNextFocus(String focusName) { + View nextView = hzTab.findViewWithTag(focusName); + if (nextView != null) { + nextView.requestFocus(); + } + } + + private void zyFcous(String tiaoma) { + if (!reReadCode) { + return; + } + View view = DjActivity.this.getCurrentFocus(); + if (view != null && view instanceof EditText) { + reReadCode = false; + ((EditText) view).setText(tiaoma); + setFcous(view); + } + } + + public void acquireWakeLock() { + if (pm == null) { + pm = (PowerManager) getSystemService(Context.POWER_SERVICE); + } + if (wakeLock == null) { + wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "crtech"); + } + if (linghtScreen == null) { + linghtScreen = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright"); + } + if (wakeLock != null) { + wakeLock.acquire(); + } + } + + // 释放设备电源锁 + public void releaseWakeLock() { + if (wakeLock != null) { + wakeLock.release(); + wakeLock = null; + } + } + + public void releaseLinghtScreen() { + if (isLinghtScreen) { + isLinghtScreen = false; + linghtScreen.release(); + } + } + + // 富力叶 android handheld terminal 扫描头 + AndroidHandheldTerminal0 androidHandheldTerminal0 = null; + + public class AndroidHandheldTerminal0 { + public boolean running = true; + + public AndroidHandheldTerminal0(final Context context) { + ScanHelper.setScanSwitchLeft(context, true); + ScanHelper.setScanSwitchRight(context, true); + ScanHelper.setBarcodeReceiveModel(context, 2); + m_Broadcastname = "com.barcode.sendBroadcast"; + final IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(m_Broadcastname); + registerReceiver(myCodeReceiver, intentFilter); + } + + + public void start() { + running = true; + } + + public void stop() { + running = false; + } + } + + private String m_Broadcastname = null; + private MyCodeReceiver myCodeReceiver = new MyCodeReceiver(); + + public class MyCodeReceiver extends BroadcastReceiver { + private static final String TAG = "MycodeReceiver"; + + @Override + public void onReceive(Context context, Intent intent) { + if (androidHandheldTerminal0.running && intent.getAction().equals(m_Broadcastname)) { + String str = intent.getStringExtra("BARCODE"); + if (!"".equals(str)) { + View rootview = DjActivity.this.getWindow().getDecorView(); + View aaa = rootview.findFocus(); + if (aaa instanceof SelfEditText) { + SelfEditText set = (SelfEditText) aaa; + set.setText(str); + new Thread(new Runnable() { + + @Override + public void run() { + Instrumentation inst = new Instrumentation(); + inst.sendKeyDownUpSync(KeyEvent.KEYCODE_ENTER); + } + }).start(); + } + } + } + } + } + + // 海信 n1s 设备扫描头控制 + public static final String HAIXIN_N1S_ACTION_SCAN_RESULT = "android.provider.sdlMessage"; + public static boolean haixinN1SStart = false; + + private static IntentFilter haixinN1SMakeDemoIntentFilter() { + final IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(HAIXIN_N1S_ACTION_SCAN_RESULT); + return intentFilter; + } + + private BroadcastReceiver haixinN1SDemoReceiver = null; + + public void haixinN1SInit() { + haixinN1SDemoReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + final String action = intent.getAction(); + if (HAIXIN_N1S_ACTION_SCAN_RESULT.equals(action)) { + final String scanResultStr = intent.getStringExtra("msg"); + + if (scanResultStr != null && scanResultStr.trim().length() > 0) { + handler.post(new Runnable() { + public void run() { + View rootview = DjActivity.this.getWindow().getDecorView(); + View aaa = rootview.findFocus(); + if (aaa instanceof SelfEditText) { + SelfEditText set = (SelfEditText) aaa; + set.setText(scanResultStr); + new Thread(new Runnable() { + + @Override + public void run() { + Instrumentation inst = new Instrumentation(); + inst.sendKeyDownUpSync(KeyEvent.KEYCODE_ENTER); + } + }).start(); + } + } + }); + } + } + } + }; + } + + public void haixinN1sStart() { + if (!haixinN1SStart) { + haixinN1SStart = true; + registerReceiver(haixinN1SDemoReceiver, haixinN1SMakeDemoIntentFilter()); + } + } + + public void haixinN1sStop() { + if (haixinN1SStart) { + haixinN1SStart = false; + unregisterReceiver(haixinN1SDemoReceiver); + } + } + + + public static AndroidHandheldTerminal androidHandheldTerminal = null; + + public class AndroidHandheldTerminal { + public void start() { + } + + public void stop() { + } + + public void restart() { + stop(); + start(); + } + } + + /** + * zkr322a 大屏 工业一体机 + */ + private boolean zkr322aIsReciverThread = true; + private Thread zkr322aReciverThread = null; + private ZKR322AControl zkr322aControl = null; + private Handler zkr322aHandler = new Handler() { + @Override + // 当有消息发送出来的时候就执行Handler的这个方法 + public void handleMessage(Message msg) { + zyFcous(msg.obj.toString()); + } + }; + + private void zkr322aNew() { + try { + zkr322aControl = new ZKR322AControl(); + zkr322aControl.initScan(); + zkr322aReciverThread = new Thread(zkr322aReciverDataRunable); + zkr322aReciverThread.start(); + } catch (Exception e) { + DialogUtil.builder(DjActivity.this, "错误信息", "[ZKR322A]初始化失败:" + e.getMessage(), 0); + } + } + + public void zkr322aClear() { + zkr322aIsReciverThread = false; + zkr322aReciverThread = null; + zkr322aControl.stop(); + zkr322aControl.close(); + zkr322aControl = null; + zkr322aHandler = null; + } + + Runnable zkr322aReciverDataRunable = new Runnable() { + @Override + public void run() { + while (zkr322aIsReciverThread && zkr322aControl != null) { + String msg = zkr322aControl.getData(); + if (msg != null && msg.length() > 0) { + Message message = new Message(); + message.obj = msg; + zkr322aHandler.sendMessage(message); + } + } + + } + }; + /** + * cr5w 设备扫描头控制 + */ + public static CR5WScanControl cr5wScanControl = null; + + /** + * 联新 nr510 控制 + */ + public static Nr510ScanControl nr510ScanControl = null; + + public class Nr510ScanControl extends BroadcastReceiver { + private boolean usecloseState = true; + private Engine engine = new Engine(); + private boolean islxScan = false; + + public Nr510ScanControl() { + Intent intent = getIntent(); + String checkBox = intent.getStringExtra("islxscan"); + islxScan = "0".equals(checkBox) ? true : false; + } + + public void start(Context context) { + if (usecloseState) { + usecloseState = false; + if (islxScan) + engine.start(context); + IntentFilter filter = new IntentFilter(); + filter.addAction("lachesis_barcode_value_notice_broadcast"); + registerReceiver(this, filter); + } + } + + public void stop(Context context) { + if (!usecloseState) { + unregisterReceiver(this); + if (islxScan) + engine.stop(context); + usecloseState = true; + } + } + + @Override + public void onReceive(Context arg0, Intent arg1) { + Log.i("NR510GetValue", "onReceive......"); + final String value = arg1 + .getStringExtra("lachesis_barcode_value_notice_broadcast_data_string"); + if (value.length() > 10) { + handler.post(new Runnable() { + public void run() { + View rootview = DjActivity.this.getWindow().getDecorView(); + View aaa = rootview.findFocus(); + if (aaa instanceof SelfEditText) { + SelfEditText set = (SelfEditText) aaa; + if (set.closeKeyBoard) { + set.setText(value); + set.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); + set.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER)); + } + } + } + }); + } + } + } + + /** + * Honeywell 设备扫描头控制 + */ + public static BarcodeReader barcodeReader = null; + private NewScanControler newScanControler; + private Thread reciverThread; + private boolean isReciverThread = true; + private BeepManager bManager; + private Handler ht518handler = new Handler() { + @Override + // 当有消息发送出来的时候就执行Handler的这个方法 + public void handleMessage(Message msg) { + bManager.playBeepSoundAndVibrate(); + zyFcous(msg.obj.toString()); + newScanControler.stopScan(); + } + }; + + public void ht518Clear() { + isReciverThread = false; + reciverThread = null; + newScanControler.stopScan(); + newScanControler.close(); + newScanControler = null; + ht518handler = null; + bManager.release(); + } + + private void ht518InitNew() { + try { + newScanControler = new NewScanControler(); + newScanControler.initScan(); + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + reciverThread = new Thread(ReciverDataRunable); + reciverThread.start(); + bManager = new BeepManager(this); + } + + Runnable ReciverDataRunable = new Runnable() { + @Override + public void run() { + while (isReciverThread) { + String msg = newScanControler.getData(); + if (msg != null && msg.length() > 0) { + Message message = new Message(); + message.obj = msg; + ht518handler.sendMessage(message); + } + } + + } + }; + + /* + * seuic PDA + */ + private com.seuic.scanner.Scanner seuicScanner; + private SoundPool soundpool = null; + private int soundid; + private boolean isKeyDown = true; + private String islxscan; + + private SeuicScanKeyEventRunnable seuicScannerThread; + + public void seuicIint() { + soundpool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 100); // MODE_RINGTONE + soundid = soundpool.load(this, R.raw.beep, 1); + if (seuicScanner == null) { + seuicScanner = ScannerFactory.getScanner(DjActivity.this); + } + ScannerKey.close(); + seuicScannerThread = new SeuicScanKeyEventRunnable(seuicScanner); + new Thread(seuicScannerThread).start(); + } + + @Override + public void onDecodeComplete(DecodeInfo info) { + if (!SysData.isreg.equals("Y")) { + openRunWin(); + } + soundpool.play(soundid, 1, 1, 0, 0, 1); + zyFcous(info.barcode); + } + + @Override + public void onTriggerEvent(TriggerStateChangeEvent event) { + } + + @Override + public void onBarcodeEvent(BarcodeReadEvent event) { + // TODO Auto-generated method stub + + final BarcodeReadEvent event2 = event; + runOnUiThread(new Runnable() { + @Override + public void run() { + if (barcodeReader == null) return; + View rootview = DjActivity.this.getWindow().getDecorView(); + if (rootview != null) { + View aaa = rootview.findFocus(); + if (aaa != null && aaa instanceof SelfEditText) { + final SelfEditText set = (SelfEditText) aaa; + set.setText(event2.getBarcodeData()); + new Thread(new Runnable() { + + @Override + public void run() { + Instrumentation inst = new Instrumentation(); + inst.sendKeyDownUpSync(KeyEvent.KEYCODE_ENTER); + } + }).start(); + } else { + } + } else { + } + continuousScanning(true); + } + }); + } + + public void continuousScanning(final boolean bState) { + + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + try { + barcodeReader.light(bState); //turn on/off backlight + barcodeReader.aim(bState); //开关瞄准线 + barcodeReader.decode(bState); //开关解码功能 + } catch (ScannerUnavailableException e) { + e.printStackTrace(); + } catch (ScannerNotClaimedException e) { + e.printStackTrace(); + } + } + }).start(); + } + + @Override + public void onFailureEvent(BarcodeFailureEvent arg0) { + } + + + /** + * 优博讯控制器 + */ + UroBoScannerControl uroBoScannerControl = null; + + public class UroBoScannerControl extends BroadcastReceiver { + private ScanManager mScanManager; + private Vibrator mVibrator; + private SoundPool soundPool; + private int soundid; + + public UroBoScannerControl() { + mScanManager = new ScanManager(); + mScanManager.openScanner(); + mScanManager.switchOutputMode(0); + if (mScanManager.getTriggerMode() != Triggering.CONTINUOUS) + mScanManager.setTriggerMode(Triggering.CONTINUOUS); + + + soundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 100); // MODE_RINGTONE + soundid = soundPool.load(DjActivity.this, R.raw.beep, 1); + + mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + + public void start() { + mScanManager.startDecode(); + IntentFilter filter = new IntentFilter(); + filter.addAction("android.intent.ACTION_DECODE_DATA"); //添加action + registerReceiver(this, filter); + } + + public void stop() { + unregisterReceiver(this); + mScanManager.stopDecode(); + mVibrator.cancel(); + soundPool.release(); + } + + @Override + public void onReceive(Context context, Intent intent) { + soundPool.play(soundid, 1, 1, 0, 0, 1); + mVibrator.vibrate(100); + + String barcode = intent.getStringExtra("barcode_string"); + handler.post(new Runnable() { + public void run() { + View rootview = DjActivity.this.getWindow().getDecorView(); + View aaa = rootview.findFocus(); + if (aaa instanceof SelfEditText) { + SelfEditText set = (SelfEditText) aaa; + set.setText(barcode); + set.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); + set.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER)); + } + } + }); + } + } + +} diff --git a/app/src/main/java/com/example/chaoran/DjtqActivity.java b/app/src/main/java/com/example/chaoran/DjtqActivity.java new file mode 100644 index 0000000..ab8b1bd --- /dev/null +++ b/app/src/main/java/com/example/chaoran/DjtqActivity.java @@ -0,0 +1,182 @@ +package com.example.chaoran; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.KeyEvent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; +import com.chaoran.component.MyAdapter; +import com.chaoran.entiry.DataGrid; +import com.chaoran.entiry.Djselefa; +import com.util.DialogUtil; +import com.util.IoUtil; +import com.util.SqlUtil; +import com.util.SysUtil; +import org.kobjects.base64.Base64; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 单据提取窗口 + */ +public class DjtqActivity extends Activity { + private ListView listview; + private int cur_pos = -1;// 当前显示的一行 + // private ArrayList items_text = new ArrayList(); + private Djselefa djselefa; + public ProgressDialog pd; + public MyAdapter adapter; + private ArrayList listdata; + private String filedName;// 显示字段的名字 + private String gzid; + private String mxTempTable; + private Intent intent; + private Handler runHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == -1) { + DialogUtil.builder(DjtqActivity.this, "错误信息", "提取方案初始化失败:" + + msg.obj.toString(),0); + } else if (msg.what == -4) { + DialogUtil.builder(DjtqActivity.this, "错误信息", "提取方案运行失败:" + + msg.obj.toString(),0); + } else { + if (msg.arg1 == 4) { + Object ob = msg.obj; + if (ob instanceof ArrayList) { + ArrayList list = (ArrayList) ob; + if (list.size() > 0) { + intent.putExtra("param", (HashMap) list.get(0)); + setResult(2, intent); + } + clear(); + } else { + DialogUtil.builder(DjtqActivity.this, "提示信息", + ob.toString(),0); + } + } else { + HashMap map = (HashMap) msg.obj; + DataGrid dg = (DataGrid) map.get("dg"); + listdata = dg.getTableData(); + if(listdata==null||listdata.size()<1){ + filedName=""; + }else{ + filedName=SysUtil.mapFirst(listdata); + } + if (adapter == null) { + adapter = new MyAdapter(DjtqActivity.this, listdata, + filedName); + listview.setAdapter(adapter); + } + } + } + if (pd != null) { + pd.dismiss(); + } + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.list); + listview = (ListView) findViewById(R.id.mxlist); + intent = getIntent(); + HashMap paramMap = (HashMap) intent.getSerializableExtra("paramMap"); + djselefa = (Djselefa) paramMap.get("djselefa"); + pd = ProgressDialog.show(DjtqActivity.this, "正在执行提取方案", "正在下载……"); + try { + new RunSearchThread(djselefa.getT_sql(), IoUtil.ob_base64(paramMap + .get("t_sqlParam")), runHandler).start(); + } catch (IOException e) { + // e.printStackTrace(); + DialogUtil.builder(this, "错误信息", "转换成Base64编码失败!",0); + } + gzid = paramMap.get("GZID").toString(); + mxTempTable = paramMap.get("mxTempTable").toString(); + intent.removeExtra("paramMap"); + TextView tv = (TextView) findViewById(R.id.mxtitle); + tv.setText(djselefa.getFangamch()); + ((Button) findViewById(R.id.mxbut)).setText("提取"); + listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// 一定要设置这个属性,否则ListView不会刷新 + listview.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView arg0, View arg1, + int position, long id) { + cur_pos = position;// 更新当前行 + adapter.cur_pos = cur_pos; + } + }); + } + + public void queryMx(View v) { + try { + if (cur_pos < 0) { + DialogUtil.builder(this, "提示信息", "请选择一行!",0); + } else { + if (mxTempTable == null || mxTempTable.length() < 0) { + DialogUtil.builder(this, "提示信息", "明细表不存在!",0); + } + HashMap item = (HashMap) listdata.get(cur_pos); + HashMap hzData = SqlUtil.regSql(djselefa.getHz_sql(), item); + HashMap mxData = SqlUtil.regSql(djselefa.getMx_sql(), item); + HashMap hm = new HashMap(); + hm.put("gzid", gzid); + hm.put("mxTempTable", mxTempTable); + hm.put("hzSql", hzData.get("sql")); + hm.put("hzParam", hzData.get("param")); + hm.put("mxSql", mxData.get("sql")); + hm.put("mxParam", mxData.get("param")); + byte[] b = IoUtil.getbyte(hm); + DialogUtil.setDialog(pd, "提示信息", "正在运行提取方案"); + new RunYmupThread(Base64.encode(b), runHandler, "runTqfa",0) + .start(); + } + } catch (Exception e) { + pd.dismiss(); + DialogUtil.builder(DjtqActivity.this, "错误信息", "提取修改方案组织数据失败!",0); + } + } + + public boolean onKeyUp(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() + && !event.isCanceled()) { + clear(); + return true; + } + return super.onKeyUp(keyCode, event); + } + + private void clear() { + listview = null; + if (pd != null) { + pd.dismiss(); + pd = null; + } + djselefa = null; + adapter = null; + if (listdata != null) { + listdata.clear(); + listdata = null; + } + filedName = null; + gzid = null; + mxTempTable = null; + intent = null; + runHandler = null; + intent = null; + finish(); + } + +} diff --git a/app/src/main/java/com/example/chaoran/ExitThread.java b/app/src/main/java/com/example/chaoran/ExitThread.java new file mode 100644 index 0000000..0d39695 --- /dev/null +++ b/app/src/main/java/com/example/chaoran/ExitThread.java @@ -0,0 +1,78 @@ +package com.example.chaoran; + +import org.ksoap2.SoapEnvelope; +import org.ksoap2.serialization.SoapObject; +import org.ksoap2.serialization.SoapSerializationEnvelope; +import org.ksoap2.transport.HttpTransportSE; + +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +import com.sys.SysData; + +/** + * 退出线程 + */ +public class ExitThread extends Thread { + public String gzid; + public String mxTempTable; + public Handler handler; + public String method; + + public ExitThread(String gzid, String mxTempTable, Handler handler, + String method) { + this.gzid = gzid; + this.mxTempTable = mxTempTable; + this.handler = handler; + this.method = method; + } + + public void run() { + super.run(); + Log.v("SearchThread", "run执行"); + try { + String url = SysData.url + "/webservice/ServiceInterface?wsdl"; + // method = "exitDj"; + SoapObject rpc = new SoapObject("", method); + rpc.addProperty("gzid", gzid); + rpc.addProperty("mxTempTable", mxTempTable); + HttpTransportSE ht = new HttpTransportSE(url); + ht.debug = true; + SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( + SoapEnvelope.VER11); + envelope.bodyOut = rpc; + envelope.dotNet = true; + envelope.setOutputSoapObject(rpc); + ht.call("", envelope); + if (handler != null) { + if (envelope.getResponse() != null) {// 判断是否返回结果,因为我这个是一个查询操作,是带有返回值的。 + Message msg = new Message(); + msg.obj = envelope.getResponse(); + if (method.equals("exitDj")) { + msg.arg1 = 4; + } else if (method.equals("queryMx")) { + msg.arg1 = 5; + } + handler.sendMessage(msg); + } else { + Message msg = new Message(); + msg.obj = null; + handler.sendMessage(msg); + } + } + } catch (Exception e) { + if (handler != null) { + Message msg = new Message(); + if (method.equals("exitDj")) { + msg.what = -4; + } else if (method.equals("queryMx")) { + msg.what = -5; + } + msg.obj = e.toString(); + handler.sendMessage(msg); +// e.printStackTrace(); + } + } + } +} diff --git a/app/src/main/java/com/example/chaoran/MainActivity.java b/app/src/main/java/com/example/chaoran/MainActivity.java new file mode 100644 index 0000000..18a7a71 --- /dev/null +++ b/app/src/main/java/com/example/chaoran/MainActivity.java @@ -0,0 +1,606 @@ +package com.example.chaoran; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.AlertDialog.Builder; +import android.app.ProgressDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.Configuration; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; +import com.chaoran.db.DBManager; +import com.chaoran.db.SqlHelpUtil; +import com.chaoran.entiry.UpdataInfo; +import com.chaoran.entiry.UserList; +import com.chaoran.lx.activity.DownDataActivity; +import com.chaoran.thread.DownApk; +import com.honeywell.aidc.AidcManager; +import com.honeywell.aidc.AidcManager.CreatedCallback; +import com.honeywell.aidc.BarcodeReader; +import com.sys.SysData; +import com.util.*; +import org.ksoap2.SoapEnvelope; +import org.ksoap2.serialization.SoapObject; +import org.ksoap2.serialization.SoapSerializationEnvelope; +import org.ksoap2.transport.HttpTransportSE; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; + +/** + * 主活动窗口 + */ +public class MainActivity extends Activity { + SqlHelpUtil db; + SQLiteDatabase sDatabase; + EditText name; + EditText pwd; + private CheckBox checkBox; + private CheckBox islxScan; + public ProgressDialog pd; + private int loginTy;// 登录类型,1为在线登录 2为离线数据下载 + private TextView regts; + public String versionStr; + + public static float def_pbl = 0.9f; // 屏幕比列 + + //Honeywell 扫描设备控制 + private static BarcodeReader barcodeReader = null; + private AidcManager manager = null; + + private Handler handler = new Handler() { + @Override + // 当有消息发送出来的时候就执行Handler的这个方法 + public void handleMessage(Message msg) { + if (msg.what == -1) { + DialogUtil.builder(MainActivity.this, "错误信息", "连接服务器失败,请检查网络!" + + msg.obj,0); + } else if (msg.what == -2) { + DialogUtil.builder(MainActivity.this, "错误信息", "用户名或密码错误!",0); + } else if (msg.what == -3) { + DialogUtil.builder(MainActivity.this, "错误信息", "解析xml失败!",0); + } else if (msg.what == -4) { + DialogUtil.builder(MainActivity.this, "错误信息", "检查更新失败,请检查网络!",0); + } else if (msg.what == -5) { + DialogUtil.builder(MainActivity.this, "错误信息", "更新文件失败!",0); + } else if (msg.what == 1) { + UpdataInfo info = (UpdataInfo) msg.obj; + if (info!=null&&!info.getVersion().equals(versionStr)) { + showUpdataDialog(info); + } + } else if (msg.what == 2) { + new InstallUtil().installApk((File) msg.obj, MainActivity.this); + } else { + if (msg.obj.equals("该功能未授权")) { + DialogUtil.builder(MainActivity.this, "提示信息", "该功能未授权!",0); + } else { + UserList user = (UserList) msg.obj; + if (user.getLgnname() == null) { + String udesc = user.getUdesc(); + if (udesc.equals("0")) { + DialogUtil.builder(MainActivity.this, "提示信息", + "PDA未注册!",0); + } else if (udesc.equals("1")) { + DialogUtil.builder(MainActivity.this, "提示信息", + "PDA还未授权使用!",0); + } else if (udesc.equals("2")) { + DialogUtil.builder(MainActivity.this, "提示信息", + "试用期已过!",0); + } else if (udesc.equals("3")) { + DialogUtil.builder(MainActivity.this, "提示信息", + "超出最大站点数,请联系管理员",0); + } else if (udesc.equals("-1")) { + DialogUtil.builder(MainActivity.this, "提示信息", + "用户名或密码错误!",0); + } + + } else { + SysData.is_lx = false; + login_end(user); + } + } + } + if (pd != null) { + pd.dismiss(); + } + } + }; + private Handler regHandler = new Handler() { + @Override + // 当有消息发送出来的时候就执行Handler的这个方法 + public void handleMessage(Message msg) { + if (msg.what != -1) { + if(msg.equals("-1")){ + regts.setText("正式 注册"); + }else{ + regts.setText("软件到期时间"+msg.obj); + } + } + } + }; + public void login_end(UserList user) { + SysData.jigid = user.getJigid(); + SysData.lgnname = user.getLgnname(); + SysData.userid = String.valueOf(user.getUserid()); + SysData.scale = MainActivity.this.getResources().getDisplayMetrics().density + 1; + SysData.t_scale = MainActivity.this.getResources().getDisplayMetrics().densityDpi >= 300f ? 1 : 300f * def_pbl / MainActivity.this.getResources().getDisplayMetrics().densityDpi; + SysData.exectime=Integer.parseInt(user.getUdesc() == null ? "60" : user.getUdesc()); + SharedPreferences sp = MainActivity.this.getSharedPreferences( + "userTxt", MODE_PRIVATE); + if (checkBox.isChecked()) { + Editor editor = sp.edit(); + editor.putString("name", name.getText().toString().trim()); + editor.putString("pwd", pwd.getText().toString().trim()); + editor.putBoolean("islxScan",islxScan.isChecked()); + editor.commit(); + } else { + sp.edit().clear().commit(); + name.setText(""); + pwd.setText(""); + } + if (loginTy == 1) { + String islxscan="1"; + if(islxScan.isChecked()){ + islxscan="0"; + } + Intent intent = new Intent(); + intent.putExtra("displaymode", user.getDisplaymode()); + intent.putExtra("islxscan", islxscan); + intent.setClass(getApplicationContext(), DjActivity.class); + startActivity(intent); + } else if (loginTy == 2) { + Intent intent = new Intent(); + intent.setClass(getApplicationContext(), DownDataActivity.class); + startActivity(intent); + } + SysData.no = name.getText().toString().trim(); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + System.setProperty("http.keepAlive", "false"); + setContentView(R.layout.activity_main); + SharedPreferences sp = getSharedPreferences("userTxt", MODE_PRIVATE); + name = (EditText) findViewById(R.id.name); + pwd = (EditText) findViewById(R.id.pwd); + regts=(TextView) findViewById(R.id.regts); + checkBox = (CheckBox) findViewById(R.id.cb); + islxScan=(CheckBox)findViewById(R.id.lxs); + if (!sp.contains("name")) { + checkBox.setChecked(false); + } else { + name.setText(sp.getString("name", "")); + pwd.setText(sp.getString("pwd", "")); + islxScan.setChecked(sp.getBoolean("islxScan", true)); + } + TextView version = (TextView) findViewById(R.id.version); + versionStr=getVersionName(); + version.setText("版本".concat(versionStr)); + SysData.clientid = SysUtil.getLocalMacAddress(MainActivity.this); + db = new SqlHelpUtil(getApplicationContext()); + sDatabase = db.getWritableDatabase(); + String selectStr = "select col1,col2,col3 from systable where desc='network'"; + Cursor select_cursor = sDatabase.rawQuery(selectStr, null); + if (select_cursor.moveToFirst()) { + SysData.url = "http://".concat(select_cursor.getString(0)) + .concat(":").concat(select_cursor.getString(1)).concat("/") + .concat(select_cursor.getString(2)); + } + select_cursor.close(); + selectStr = "select col1 from systable where desc='pdaState'"; + select_cursor = sDatabase.rawQuery(selectStr, null); + if (select_cursor.moveToFirst()) { + SysData.isreg = select_cursor.getString(0); + System.out.println(SysData.isreg+"---------------------"); + } + select_cursor.close(); + if (SysData.url != null) { + new Thread(new CheckVersionTask()).start(); + new Thread(queryZcrq).start(); + } + BufferedReader br = null; + BufferedWriter bw = null; + File file = new File(getFilesDir().getAbsolutePath() + "/cr_pda_config"); + try { + if (!file.exists()) + file.createNewFile(); + FileInputStream fis = new FileInputStream(file); + InputStreamReader isr = new InputStreamReader(fis); + br = new BufferedReader(isr); + String s = br.readLine(); + if (s == null || s.trim().length() < 1) + throw new Exception("Update config data."); + def_pbl = Float.parseFloat(s); + if (def_pbl < 0.1 || def_pbl > 10.0) + throw new Exception("请填写 0.1~10.0 之间的浮点数!"); + } catch (Exception e) { + def_pbl = 0.9f; + try { + FileOutputStream fos = new FileOutputStream(file); + OutputStreamWriter osw = new OutputStreamWriter(fos); + bw = new BufferedWriter(osw); + bw.append(Float.toString(def_pbl)); + } catch (IOException e1) { + e1.printStackTrace(); + } + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (bw != null) { + try { + bw.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + if ("scanpal eda50".equals(android.os.Build.MODEL.toLowerCase())) { + AidcManager.create(this, new CreatedCallback() { + + @Override + public void onCreated(AidcManager aidcManager) { + manager = aidcManager; + barcodeReader = manager.createBarcodeReader(); + } + }); + } + + } + + public static BarcodeReader getBarcodeObject() { + return barcodeReader; + } + + Runnable downloadRun = new Runnable() { + public void run() { + login(name.getText().toString().trim(), pwd.getText().toString() + .trim()); + } + }; + Runnable queryZcrq = new Runnable() { + public void run() { + try { + String url = SysData.url + "/webservice/ServiceInterface?wsdl"; + String method = "regEndRq"; + SoapObject rpc = new SoapObject("", method); + HttpTransportSE ht = new HttpTransportSE(url, SysData.timeout); + ht.debug = true; + SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( + SoapEnvelope.VER11); + envelope.bodyOut = rpc; + envelope.dotNet = true; + envelope.setOutputSoapObject(rpc); + ht.call("", envelope); + Message message = new Message(); + message.obj = envelope.getResponse().toString(); + regHandler.sendMessage(message); + } catch (Exception e) { + Message message = new Message(); + message.what = -1; + message.obj = e.toString(); + regHandler.sendMessage(message); + } + + } + }; + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.activity_main, menu); + return true; + } + + /* + * 获取当前程序的版本号 + */ + private String getVersionName() { + // 获取packagemanager的实例 + PackageManager packageManager = getPackageManager(); + // getPackageName()是你当前类的包名,0代表是获取版本信息 + PackageInfo packInfo = null; + try { + packInfo = packageManager.getPackageInfo(getPackageName(), 0); + } catch (NameNotFoundException e) { + DialogUtil.builder(MainActivity.this, "错误信息", "获取版本号失败!",0); + } + return packInfo.versionName; + } + + // 设置按钮监听 + public void onset(View v) { + Intent intent = new Intent(); + intent.setClass(this, NetWorkSet.class); + startActivity(intent); + } + + public void onopentest(View v) { + DialogUtil.builder(this, "测试标题","测试内容!open" + v.getLeft(), 18); + } + + public void onclosetest(View v) { + DialogUtil.builder(this, "测试标题","测试内容!close" + v.getLeft(), 18); + } + + // 设置按钮监听 + public void onRotation(View v) { + int i = MainActivity.this.getRequestedOrientation(); + // name.setText(i+"--"+ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT+"--"+ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + if (i == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) { + MainActivity.this + .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + // 纵屏反方向 + else if (i == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || i == 3) { + MainActivity.this + .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); + } + } + + public boolean isNull() { + if (name.getText().toString().trim().equals("")) { + DialogUtil.builder(this, "错误信息", "用户名不能为空!",0); + name.requestFocus(); + return false; + } + if (pwd.getText().toString().trim().equals("")) { + DialogUtil.builder(this, "错误信息", "密码不能为空!",0); + pwd.requestFocus(); + return false; + } + return true; + } + + // 设置按钮监听 + public void onsub(View v) { + loginTy = 1; + start_login(); + } + + public void start_login() { + if (!isNull()) { + return; + } + if (!SysUtil.isNetworkConnected(MainActivity.this)) { + DialogUtil.builder(MainActivity.this, "提示", "网络没连接!请检查网络",0); + return; + } + if (name.getText().toString().trim().equals("crtech") + && pwd.getText().toString().trim().equals("crtech")) { + Intent pdaIntent = new Intent(); + pdaIntent.setClass(this, PdaRegActivity.class); + startActivity(pdaIntent); + return; + } + if (SysData.url == null || SysData.url.trim().length() < 1) { + DialogUtil.builder(this, "错误信息", "请设置URL!",0); + return; + } + if (SysData.clientid.trim().length() < 1) { + DialogUtil.builder(this, "错误信息", "mac地址为空,请检查网络!",0); + return; + } + if (pd == null) { + pd = ProgressDialog.show(this, "提示", "正在登录……"); + } else { + DialogUtil.setDialog(pd, "提示", "正在登录……"); + } + + new Thread(downloadRun).start(); + } + + public void login(String name, String pwd) { + try { + String url = SysData.url + "/webservice/ServiceInterface?wsdl"; + String method = "login"; + SoapObject rpc = new SoapObject("", method); + rpc.addProperty("name", name); + rpc.addProperty("pwd", pwd); + rpc.addProperty("mac", SysData.clientid); + HttpTransportSE ht = new HttpTransportSE(url, SysData.timeout); + ht.debug = true; + SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( + SoapEnvelope.VER11); + envelope.bodyOut = rpc; + envelope.dotNet = true; + envelope.setOutputSoapObject(rpc); + ht.call("", envelope); + if (envelope.getResponse() != null) { + byte[] bb = org.kobjects.base64.Base64.decode(envelope + .getResponse().toString()); + Message message = new Message(); + message.obj = IoUtil.byte_obj(bb); + handler.sendMessage(message); + } else { + Message message = new Message(); + message.what = -2; + handler.sendMessage(message); + } + } catch (Exception e) { + Message message = new Message(); + message.what = -1; + message.obj = e.toString(); + handler.sendMessage(message); + } + + } + + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (event.KEYCODE_BACK == keyCode) { + if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + } + return super.onKeyDown(keyCode, event); + } + + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (db != null) { + db.close(); + sDatabase.close(); + } + if (barcodeReader != null) { + // close BarcodeReader to clean up resources. + barcodeReader.close(); + barcodeReader = null; + } + + if (manager != null) { + // close AidcManager to disconnect from the scanner service. + // once closed, the object can no longer be used. + manager.close(); + } + } + + private void showUpdataDialog(final UpdataInfo info) { + Builder builer = new Builder(this); + builer.setTitle("版本升级"); + builer.setMessage(info.getDescription()); + // 当点确定按钮时从服务器上下载 新的apk 然后安装 + builer.setPositiveButton("确定", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + downLoadApk(SysData.url.concat(info.getUrl())); + } + }); + // 当点取消按钮时进行登录 + builer.setNegativeButton("取消", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + AlertDialog dialog = builer.create(); + dialog.show(); + } + + private void downLoadApk(String url) { + ProgressDialog pd = new ProgressDialog(this); + pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + pd.setMessage("正在下载更新"); + pd.show(); + new Thread(new DownApk(pd, url, this.getApplicationContext(), handler)) + .start(); + } + + public class CheckVersionTask implements Runnable { + public void run() { + InputStream is = null; + HttpURLConnection conn = null; + try { + String path = SysData.url + "/apk.xml"; + URL url = new URL(path); + conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(5000); + if (conn.getResponseCode() == 200) { + is = conn.getInputStream(); + Message msg = new Message(); + msg.what = 1; + msg.obj = Dom4jUtil.parserXml(is,versionStr); + handler.sendMessage(msg); + } + } catch (Exception e) { + Message msg = new Message(); + msg.what = -4; + handler.sendMessage(msg); + } finally { + try { + if (is != null) + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + super.onOptionsItemSelected(item); + switch (item.getItemId())// 得到被点击的item的itemId + { + case R.id.lxdatadown: + loginTy = 2; + start_login(); + break; + case R.id.lxlogin: + if (!isNull()) { + return true; + } + DBManager dbManager = new DBManager(this); + if (dbManager.existsTable("userlist".toUpperCase()) < 1) { + DialogUtil.builder(MainActivity.this, "信息提示", "请下载用户资料表!",0); + } else { + String sql = "select jigid,lgnname,userid from userlist where username='" + + name.getText().toString().trim() + + "' and pass='" + + pwd.getText().toString().trim() + "'"; + Cursor cur = dbManager.query(sql); + if (cur.getCount() == 0) { + DialogUtil.builder(MainActivity.this, "信息提示", "用户账号错误!",0); + } else { + SysData.is_lx = true; + UserList user = new UserList(); + if (cur.moveToFirst()) { + user.setJigid(cur.getString(0)); + user.setLgnname(cur.getString(1)); + user.setUserid(cur.getInt(2)); + user.setDisplaymode("grid"); + loginTy = 1; + login_end(user); + } + if (dbManager.existsTable("TEMP_BI_DJHZ".toUpperCase()) < 1) { + dbManager + .exeSql("create table TEMP_BI_DJHZ(FIELDNAME varchar(200),FIELDVALUE VARCHAR(8000))"); + } + } + cur.close(); + cur = null; + } + dbManager.closeDB(); + break; + default: + break; + } + return true; + } + + /** + * 该方法解决屏幕旋转程序崩溃,需要对应 AndroidManifest.xml 文件 android:configChanges="orientation|screenSize|keyboardHidden" 配置 + */ + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { + Toast.makeText(this, "转换横屏", Toast.LENGTH_SHORT).show(); + } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { + Toast.makeText(this, "转换竖屏", Toast.LENGTH_SHORT).show(); + } + } +} diff --git a/app/src/main/java/com/example/chaoran/MenuActivity.java b/app/src/main/java/com/example/chaoran/MenuActivity.java new file mode 100644 index 0000000..1f0554e --- /dev/null +++ b/app/src/main/java/com/example/chaoran/MenuActivity.java @@ -0,0 +1,119 @@ +package com.example.chaoran; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.Menu; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; +import android.widget.SimpleAdapter; +import com.sys.SysData; +import org.ksoap2.SoapEnvelope; +import org.ksoap2.serialization.SoapObject; +import org.ksoap2.serialization.SoapSerializationEnvelope; +import org.ksoap2.transport.HttpTransportSE; + +import java.io.ByteArrayInputStream; +import java.io.ObjectInputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 菜单窗口 + */ +public class MenuActivity extends Activity { + private ListView listView; + private List mData; + SimpleAdapter adapter; + Runnable downloadRun = new Runnable() { + public void run() { + purview(); + } + }; + private Handler handler = new Handler() { + @Override + // 当有消息发送出来的时候就执行Handler的这个方法 + public void handleMessage(Message msg) { + adapter.notifyDataSetChanged(); + } + + }; + public void purview(){ + try { + String url = SysData.url+"/ChaoRanBI/webservice/ServiceInterface?wsdl"; + System.out.println(url); + String method = "selectAndroidPurview"; + SoapObject rpc = new SoapObject("", method); + rpc.addProperty("userid",SysData.userid); + HttpTransportSE ht = new HttpTransportSE(url); + ht.debug = true; + SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( + SoapEnvelope.VER11); + envelope.bodyOut = rpc; + envelope.dotNet = true; + envelope.setOutputSoapObject(rpc); + ht.call("", envelope); + if (envelope.getResponse() != null) {// 判断是否返回结果,因为我这个是一个查询操作,是带有返回值的。 + byte[] bb = org.kobjects.base64.Base64.decode(envelope + .getResponse().toString()); + ByteArrayInputStream bin = new ByteArrayInputStream(bb); + ObjectInputStream oin = new ObjectInputStream(bin); + List list= (List) oin.readObject(); +// for(int i=0;i arg0, View arg1, int arg2, + long arg3) { + Map map=(Map)mData.get(arg2); +// System.out.println(map.get("gn_no")); + Intent intent = new Intent(); + intent.putExtra("formlx", map.get("gn_no").toString()); + intent.setClass(getApplicationContext(), DjActivity.class); + startActivity(intent); + } + }; + listView.setOnItemClickListener(lis1); + setContentView(listView); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.activity_menu, menu); + return true; + } +} diff --git a/app/src/main/java/com/example/chaoran/MipcaActivityCapture.java b/app/src/main/java/com/example/chaoran/MipcaActivityCapture.java new file mode 100644 index 0000000..457807f --- /dev/null +++ b/app/src/main/java/com/example/chaoran/MipcaActivityCapture.java @@ -0,0 +1,229 @@ +package com.example.chaoran; + + +import java.io.IOException; +import java.util.Vector; + +import android.app.Activity; +import android.content.Intent; +import android.content.res.AssetFileDescriptor; +import android.graphics.Bitmap; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.MediaPlayer.OnCompletionListener; +import android.os.Bundle; +import android.os.Handler; +import android.os.Vibrator; +import android.view.SurfaceHolder; +import android.view.SurfaceHolder.Callback; +import android.view.SurfaceView; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.Toast; + +import com.example.chaoran.R; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.Result; +import com.mining.app.zxing.camera.CameraManager; +import com.mining.app.zxing.decoding.CaptureActivityHandler; +import com.mining.app.zxing.decoding.InactivityTimer; +import com.mining.app.zxing.view.ViewfinderView; +/** + * 摄像头扫描条码 + */ +public class MipcaActivityCapture extends Activity implements Callback { + + private CaptureActivityHandler handler; + private ViewfinderView viewfinderView; + private boolean hasSurface; + private Vector decodeFormats; + private String characterSet; + private InactivityTimer inactivityTimer; + private MediaPlayer mediaPlayer; + private boolean playBeep; + private static final float BEEP_VOLUME = 0.10f; + private boolean vibrate; + private String uiId; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.camerascansctivity); + //ViewUtil.addTopView(getApplicationContext(), this, R.string.scan_card); + CameraManager.init(getApplication()); + viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view); + Intent intent = getIntent(); + uiId = intent.getStringExtra("uiId"); + Button mButtonBack = (Button) findViewById(R.id.button_back); + mButtonBack.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + MipcaActivityCapture.this.finish(); + + } + }); + hasSurface = false; + inactivityTimer = new InactivityTimer(this); + } + + @Override + protected void onResume() { + super.onResume(); + SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view); + SurfaceHolder surfaceHolder = surfaceView.getHolder(); + if (hasSurface) { + initCamera(surfaceHolder); + } else { + surfaceHolder.addCallback(this); + surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); + } + decodeFormats = null; + characterSet = null; + + playBeep = true; + AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE); + if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) { + playBeep = false; + } + initBeepSound(); + vibrate = true; + + } + + @Override + protected void onPause() { + super.onPause(); + if (handler != null) { + handler.quitSynchronously(); + handler = null; + } + CameraManager.get().closeDriver(); + } + + @Override + protected void onDestroy() { + inactivityTimer.shutdown(); + super.onDestroy(); + } + + /** + * 处理扫描结果 + * @param result + * @param barcode + */ + public void handleDecode(Result result, Bitmap barcode) { + inactivityTimer.onActivity(); + playBeepSoundAndVibrate(); + String resultString = result.getText(); + if (resultString.equals("")) { + Toast.makeText(MipcaActivityCapture.this, "Scan failed!", Toast.LENGTH_SHORT).show(); + }else { + Intent resultIntent = new Intent(); + Bundle bundle = new Bundle(); + bundle.putString("tm", resultString); + bundle.putString("uiId",uiId); + System.out.println(resultString+"==============-"+uiId+"--------------------------------------------------------"); +// bundle.putParcelable("bitmap", barcode); + resultIntent.putExtras(bundle); + this.setResult(4, resultIntent); + } + MipcaActivityCapture.this.finish(); + } + + private void initCamera(SurfaceHolder surfaceHolder) { + try { + CameraManager.get().openDriver(surfaceHolder); + } catch (IOException ioe) { + return; + } catch (RuntimeException e) { + return; + } + if (handler == null) { + handler = new CaptureActivityHandler(this, decodeFormats, + characterSet); + } + } + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, + int height) { + + } + + @Override + public void surfaceCreated(SurfaceHolder holder) { + if (!hasSurface) { + hasSurface = true; + initCamera(holder); + } + + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + hasSurface = false; + + } + + public ViewfinderView getViewfinderView() { + return viewfinderView; + } + + public Handler getHandler() { + return handler; + } + + public void drawViewfinder() { + viewfinderView.drawViewfinder(); + + } + + private void initBeepSound() { + if (playBeep && mediaPlayer == null) { + // The volume on STREAM_SYSTEM is not adjustable, and users found it + // too loud, + // so we now play on the music stream. + setVolumeControlStream(AudioManager.STREAM_MUSIC); + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.setOnCompletionListener(beepListener); + + AssetFileDescriptor file = getResources().openRawResourceFd( + R.raw.beep); + try { + mediaPlayer.setDataSource(file.getFileDescriptor(), + file.getStartOffset(), file.getLength()); + file.close(); + mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME); + mediaPlayer.prepare(); + } catch (IOException e) { + mediaPlayer = null; + } + } + } + + private static final long VIBRATE_DURATION = 200L; + + private void playBeepSoundAndVibrate() { + if (playBeep && mediaPlayer != null) { + mediaPlayer.start(); + } +// if (vibrate) { +// Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); +// vibrator.vibrate(VIBRATE_DURATION); +// } + } + + /** + * When the beep has finished playing, rewind to queue up another one. + */ + private final OnCompletionListener beepListener = new OnCompletionListener() { + public void onCompletion(MediaPlayer mediaPlayer) { + mediaPlayer.seekTo(0); + } + }; + +} diff --git a/app/src/main/java/com/example/chaoran/NetWorkSet.java b/app/src/main/java/com/example/chaoran/NetWorkSet.java new file mode 100644 index 0000000..a334872 --- /dev/null +++ b/app/src/main/java/com/example/chaoran/NetWorkSet.java @@ -0,0 +1,244 @@ +package com.example.chaoran; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.HashMap; + +import org.kobjects.base64.Base64; + +import com.chaoran.db.SqlHelpUtil; +import com.example.chaoran.R; +import com.sys.SysData; +import com.util.DialogUtil; +import com.util.IoUtil; +import com.util.SysUtil; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.provider.Settings.Secure; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.util.DisplayMetrics; +import android.view.Menu; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +/** + * 网络相关窗口 + */ +@SuppressLint("NewApi") +public class NetWorkSet extends Activity { + private EditText ip; + private EditText port; + private EditText itemName; + private EditText bz; + private SqlHelpUtil db; + private SQLiteDatabase sDatabase; + private TextView supportDevices; + + private Handler regHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.obj.equals("0")) { + DialogUtil.builder(NetWorkSet.this, "提示信息", "注册成功!", 0); + } else if (msg.obj.equals("1")) { + DialogUtil.builder(NetWorkSet.this, "提示信息", "该PDA已注册!", 0); + } else { + DialogUtil.builder(NetWorkSet.this, "提示信息", "注册失败!" + msg.obj.toString(), 0); + } + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // + BufferedReader br = null; + BufferedWriter bw = null; + File file = new File(getFilesDir().getAbsolutePath() + "/cr_pda_config"); + try { + if (!file.exists()) { + file.createNewFile(); + //DialogUtil.builder(NetWorkSet.this, "错误信息", "文件不存在!", 0); + } + FileInputStream fis = new FileInputStream(file); + InputStreamReader isr = new InputStreamReader(fis); + br = new BufferedReader(isr); + String s = br.readLine(); + if (s == null || s.trim().length() < 1) + throw new Exception("Update config data."); + MainActivity.def_pbl = Float.parseFloat(s); + if (MainActivity.def_pbl < 0.1 || MainActivity.def_pbl > 10.0) + throw new Exception("请填写 0.1~10.0 之间的浮点数!"); + } catch (Exception e) { + DialogUtil.builder(NetWorkSet.this, "错误信息", e.getMessage(), 0); + MainActivity.def_pbl = 0.9f; + try { + FileOutputStream fos = new FileOutputStream(file); + OutputStreamWriter osw = new OutputStreamWriter(fos); + bw = new BufferedWriter(osw); + bw.append(Float.toString(MainActivity.def_pbl)); + } catch (IOException e1) { + e1.printStackTrace(); + } + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (bw != null) { + try { + bw.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + setContentView(R.layout.activity_net_work_set); + ip = (EditText) findViewById(R.id.ip); + port = (EditText) findViewById(R.id.port); + itemName = (EditText) findViewById(R.id.itemName); + bz = (EditText) findViewById(R.id.bz); + TextView mactv = (TextView) findViewById(R.id.mac); + mactv.setText("mac:" + SysUtil.getLocalMacAddress(NetWorkSet.this)); + TextView androidIDtv = (TextView) findViewById(R.id.androidID); + androidIDtv.setText("sn:" + SysUtil.getSn()); + EditText te = (EditText) findViewById(R.id.itemName91); + te.setText(Float.toString(MainActivity.def_pbl)); + // MainActivity.this.getResources().getDisplayMetrics().densityDpi + TextView modeltv = (TextView) findViewById(R.id.model); + modeltv.setText("型号:" + android.os.Build.MODEL.toLowerCase()); + // + TextView phoneDpi = (TextView) findViewById(R.id.phoneDpi); + phoneDpi.setText("密度:" + getResources().getDisplayMetrics().densityDpi); + // + db = new SqlHelpUtil(getApplicationContext()); + sDatabase = db.getWritableDatabase(); + System.out.println(sDatabase.getMaximumSize() + "--------------------------"); + String selectStr = "select col1,col2,col3 from systable where desc='network'"; + Cursor select_cursor = sDatabase.rawQuery(selectStr, null); + if (select_cursor.moveToFirst()) { + ip.setText(select_cursor.getString(0)); + port.setText(select_cursor.getString(1)); + itemName.setText(select_cursor.getString(2)); + } + select_cursor.close(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.activity_net_work_set, menu); + return true; + } + + public void onsub(View v) { + EditText te = (EditText) findViewById(R.id.itemName91); + try { + MainActivity.def_pbl = Float.parseFloat(te.getText().toString()); + } catch (Exception ex) { + DialogUtil.builder(NetWorkSet.this, "错误信息", "请填写 0.1~10.0 之间的浮点数!", 0); + MainActivity.def_pbl = 0.9f; + } finally { + if (MainActivity.def_pbl < 0.1 || MainActivity.def_pbl > 10.0) { + DialogUtil.builder(NetWorkSet.this, "错误信息", "请填写 0.1~10.0 之间的浮点数!", 0); + MainActivity.def_pbl = 0.9f; + } + } + // + BufferedWriter bw = null; + File file = new File(getFilesDir().getAbsolutePath() + "/cr_pda_config"); + + try { + FileOutputStream fos = new FileOutputStream(file); + OutputStreamWriter osw = new OutputStreamWriter(fos); + bw = new BufferedWriter(osw); + bw.append(Float.toString(MainActivity.def_pbl)); + } catch (IOException e1) { + e1.printStackTrace(); + } finally { + if (bw != null) { + try { + bw.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + // + // DialogUtil.builder(NetWorkSet.this, "错误信息", "请检查网络!" + + // MainActivity.def_pbl,0); + if (ip.getText().toString().trim().equals("")) { + DialogUtil.builder(NetWorkSet.this, "错误信息", "请填写IP!", 0); + ip.requestFocus(); + return; + } + if (port.getText().toString().trim().equals("")) { + DialogUtil.builder(NetWorkSet.this, "错误信息", "请填写端口!", 0); + port.requestFocus(); + return; + } + if (itemName.getText().toString().trim().equals("")) { + DialogUtil.builder(NetWorkSet.this, "错误信息", "请填写工程名!", 0); + itemName.requestFocus(); + return; + } + String selectStr = "select col1 from systable where desc='network'"; + Cursor select_cursor = sDatabase.rawQuery(selectStr, null); + String ipValue = ip.getText().toString().trim(); + String portValue = port.getText().toString().trim(); + String itemNameValue = itemName.getText().toString().trim(); + if (select_cursor.moveToFirst()) { + sDatabase.execSQL("update systable set col1='" + ipValue + "',col2='" + portValue + "',col3='" + itemNameValue + "' where desc='network'"); + } else { + sDatabase.execSQL("insert into systable (col1,col2,col3,desc) values('" + ipValue + "','" + portValue + "','" + itemNameValue + "','network')"); + } + select_cursor.close(); + SysData.url = "http://".concat(ipValue).concat(":").concat(portValue).concat("/").concat(itemNameValue); + DialogUtil.builder(NetWorkSet.this, "提示", "设置成功!", 0); + } + + public void onback(View v) { + // Intent intent = this.getIntent(); + // setResult(0, intent); + finish(); + + } + + public void pdaRegister(View v) throws Exception { + String mac = SysData.clientid; + if (mac == null || mac.length() < 1) { + DialogUtil.builder(NetWorkSet.this, "提示", "mac地址为空,请检查网络", 0); + return; + } + HashMap map = new HashMap(); + map.put("mac", mac); + map.put("bz", bz.getText().toString().trim()); + byte[] b = IoUtil.getbyte(map); + String paramString = Base64.encode(b); + new RunYmupThread(paramString, regHandler, "pdaRegister", 0).start(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (db != null) { + db.close(); + sDatabase.close(); + } + } + +} diff --git a/app/src/main/java/com/example/chaoran/ParamActivity.java b/app/src/main/java/com/example/chaoran/ParamActivity.java new file mode 100644 index 0000000..12145ea --- /dev/null +++ b/app/src/main/java/com/example/chaoran/ParamActivity.java @@ -0,0 +1,108 @@ +package com.example.chaoran; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; +import android.widget.TextView; +import com.chaoran.component.MyAdapter; +import com.chaoran.entiry.DataGrid; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 参数窗口 + */ +public class ParamActivity extends Activity { + private ListView listView; + private List listdata; + private TextView tv; + private MyAdapter mxAdapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_param); + listView = (ListView) findViewById(R.id.list); + tv = (TextView) findViewById(R.id.tvtitle); + final Intent intent = getIntent(); + DataGrid dg = (DataGrid) intent.getSerializableExtra("dg"); + listdata = dg.getTableData(); + // SimpleAdapter mxAdapter = new SimpleAdapter(this,listdata, + // R.layout.activity_menu, + // new String[] {dg.getTableHead().get(0).get("columnName").toString()}, + // new int[] { R.id.title }); + + mxAdapter = new MyAdapter(this, (ArrayList) listdata, dg.getTableHead() + .get(0).get("columnName").toString()); + tv.setText(dg.getTableHead().get(0).get("columnChineseName").toString()); + listView.setAdapter(mxAdapter); + // listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// + // 一定要设置这个属性,否则ListView不会刷新 + OnItemClickListener lis1 = new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + // mxAdapter.cur_pos=arg2; + arg1.setBackgroundColor(Color.GREEN); + Serializable map = (Serializable) listdata.get(arg2); + // Intent int =getIntent(); + // intent.putExtra("param",map); + intent.putExtra("param", map); + intent.putExtra("audioFld", + intent.getSerializableExtra("audioFld")); + setResult(1, intent); + clear(); + } + }; + listView.setOnItemClickListener(lis1); + } + + public void onback(View v) { + clear(); + } + + public boolean onKeyUp(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() + && !event.isCanceled()) { + clear(); + return true; + } + if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { + if (mxAdapter.cur_pos < listdata.size()) { + mxAdapter.cur_pos++; + listView.setSelection(mxAdapter.cur_pos); + mxAdapter.notifyDataSetChanged(); + } + } + if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { + if (mxAdapter.cur_pos >0) { + mxAdapter.cur_pos--; + listView.setSelection(mxAdapter.cur_pos); + mxAdapter.notifyDataSetChanged(); + } + } + return super.onKeyUp(keyCode, event); + } + + private void clear() { + listView = null; + tv = null; + if (listdata != null) { + listdata.clear(); + listdata = null; + mxAdapter.clear(); + mxAdapter = null; + } + finish(); + } + +} diff --git a/app/src/main/java/com/example/chaoran/PdaRegActivity.java b/app/src/main/java/com/example/chaoran/PdaRegActivity.java new file mode 100644 index 0000000..0b92133 --- /dev/null +++ b/app/src/main/java/com/example/chaoran/PdaRegActivity.java @@ -0,0 +1,189 @@ +package com.example.chaoran; + +import android.app.Activity; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.Menu; +import android.view.View; +import android.widget.EditText; +import com.chaoran.db.SqlHelpUtil; +import com.sys.SysData; +import com.util.DialogUtil; +import com.util.SysUtil; +import org.ksoap2.SoapEnvelope; +import org.ksoap2.serialization.SoapObject; +import org.ksoap2.serialization.SoapSerializationEnvelope; +import org.ksoap2.transport.HttpTransportSE; + +/** + * pda注册窗口 + */ +public class PdaRegActivity extends Activity { + private EditText ip; + private EditText port; + private EditText itemName; + private SqlHelpUtil db; + private SQLiteDatabase sDatabase; + private Handler handler = new Handler() { + @Override + // 当有消息发送出来的时候就执行Handler的这个方法 + public void handleMessage(Message msg) { + if (msg.what == -1) { + DialogUtil.builder(PdaRegActivity.this, "错误信息", "连接服务器失败,请检查网络!" + + msg.obj,0); + } else if (msg.what == -2) { + DialogUtil.builder(PdaRegActivity.this, "错误信息", "返回值为空!",0); + } else{ + String retunVal=msg.obj.toString(); + if(retunVal.equals("-1")){ + DialogUtil.builder(PdaRegActivity.this, "提示信息", "序列号还未注册!",0); + }else if(!retunVal.equals("Y")){ + DialogUtil.builder(PdaRegActivity.this, "提示信息", "序列号还未启用!",0); + }else{ + DialogUtil.builder(PdaRegActivity.this, "提示信息", "操作成功!",0); + String selectStr = "select col1 from systable where desc='pdaState'"; + Cursor select_cursor = sDatabase.rawQuery(selectStr, null); + if (select_cursor.moveToFirst()) { + sDatabase.execSQL("update systable set col1='Y' where desc='pdaState'"); + } else { + sDatabase + .execSQL("insert into systable (col1,desc) values('Y','pdaState')"); + } + select_cursor.close(); + SysData.isreg="Y"; + } + } + } + }; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_pda_reg); + ip = (EditText) findViewById(R.id.ip); + port = (EditText) findViewById(R.id.port); + itemName = (EditText) findViewById(R.id.itemName); + db = new SqlHelpUtil(getApplicationContext()); + sDatabase = db.getWritableDatabase(); + String selectStr = "select col1,col2,col3 from systable where desc='pdaRegServer'"; + Cursor select_cursor = sDatabase.rawQuery(selectStr, null); + if (select_cursor.moveToFirst()) { + ip.setText(select_cursor.getString(0)); + port.setText(select_cursor.getString(1)); + itemName.setText(select_cursor.getString(2)); + } + select_cursor.close(); + } + + public void onsub(View v) { + if (ip.getText().toString().trim().equals("")) { + DialogUtil.builder(PdaRegActivity.this, "错误信息", "请填写服务器IP!",0); + ip.requestFocus(); + return; + } + if (port.getText().toString().trim().equals("")) { + DialogUtil.builder(PdaRegActivity.this, "错误信息", "请填写服务器端口!",0); + port.requestFocus(); + return; + } + if (itemName.getText().toString().trim().equals("")) { + DialogUtil.builder(PdaRegActivity.this, "错误信息", "请填写工程名!",0); + itemName.requestFocus(); + return; + } + String selectStr = "select col1 from systable where desc='pdaRegServer'"; + Cursor select_cursor = sDatabase.rawQuery(selectStr, null); + String ipValue = ip.getText().toString().trim(); + String portValue = port.getText().toString().trim(); + String itemNameValue = itemName.getText().toString().trim(); + if (select_cursor.moveToFirst()) { + sDatabase.execSQL("update systable set col1='" + ipValue + + "',col2='" + portValue + "',col3='" + itemNameValue + + "' where desc='pdaRegServer'"); + } else { + sDatabase + .execSQL("insert into systable (col1,col2,col3,desc) values('" + + ipValue + + "','" + + portValue + + "','" + + itemNameValue + "','pdaRegServer')"); + } + select_cursor.close(); + SysData.url = "http://".concat(ipValue).concat(":").concat(portValue) + .concat("/").concat(itemNameValue); + DialogUtil.builder(PdaRegActivity.this, "提示", "保存成功,请点下面的PDA注册按钮进行注册!",0); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.activity_pda_reg, menu); + return true; + } + + public void onback(View v) { + finish(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (db != null) { + db.close(); + sDatabase.close(); + } + } + + public void pdaRegister(View v) throws Exception { + String sn = SysUtil.getSn(); + if (sn == null || sn.length() < 1) { + DialogUtil.builder(PdaRegActivity.this, "提示", "序列号为空,请联系供应商",0); + return; + } + new Thread(new PdaRegValidate()).start(); + } + + public class PdaRegValidate implements Runnable { + public void run() { + String ipValue = ip.getText().toString().trim(); + String portValue = port.getText().toString().trim(); + String itemNameValue = itemName.getText().toString().trim(); + String url = "http://".concat(ipValue).concat(":") + .concat(portValue).concat("/").concat(itemNameValue); + url = url + "/webservice/ServiceInterface?wsdl"; + System.out.println(url); + String method = "pdaZcValidate"; + SoapObject rpc = new SoapObject("", method); + System.out.println(SysUtil.getSn()); + rpc.addProperty("sn", SysUtil.getSn()); + try { + HttpTransportSE ht = new HttpTransportSE(url, SysData.timeout); + ht.debug = true; + SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( + SoapEnvelope.VER11); + envelope.bodyOut = rpc; + envelope.dotNet = true; + envelope.setOutputSoapObject(rpc); + ht.call("", envelope); + if (envelope.getResponse() != null) { + String s=envelope.getResponse().toString(); + Message message = new Message(); + message.obj = s; + handler.sendMessage(message); + }else{ + Message message = new Message(); + message.what = -2; + handler.sendMessage(message); + } + } catch (Exception e) { + e.printStackTrace(); + Message message = new Message(); + message.what = -1; + message.obj = e.toString(); + handler.sendMessage(message); + } + } + } +} diff --git a/app/src/main/java/com/example/chaoran/RunSearchThread.java b/app/src/main/java/com/example/chaoran/RunSearchThread.java new file mode 100644 index 0000000..3f53ed9 --- /dev/null +++ b/app/src/main/java/com/example/chaoran/RunSearchThread.java @@ -0,0 +1,87 @@ +package com.example.chaoran; + +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import com.chaoran.entiry.DataGrid; +import com.sys.SysData; +import com.util.IoUtil; +import org.ksoap2.SoapEnvelope; +import org.ksoap2.serialization.SoapObject; +import org.ksoap2.serialization.SoapSerializationEnvelope; +import org.ksoap2.transport.HttpTransportSE; + +import java.util.HashMap; +import java.util.Map; + +/*运行检索方案线程*/ +public class RunSearchThread extends Thread { + private String sql; + private String param; + private Handler handler; + private String return_one;// 是否单行返回 + private String audioFld;// 声音播放字段 + + public RunSearchThread(String sql, String param, Handler handler, + String return_one, String audioFld) { + this.sql = sql; + this.param = param; + this.handler = handler; + this.return_one = return_one; + this.audioFld = audioFld; + } + + public RunSearchThread(String sql, String param, Handler handler) { + this.sql = sql; + this.param = param; + this.handler = handler; + } + + public void run() { + super.run(); + Log.v("RunSearchThread", "run执行"); + try { + String url = SysData.url + "/webservice/ServiceInterface?wsdl"; + String method = "runSearch"; + SoapObject rpc = new SoapObject("", method); + rpc.addProperty("sql", sql); + rpc.addProperty("base64Param", param); + HttpTransportSE ht = new HttpTransportSE(url,SysData.timeout); + ht.debug = true; + SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( + SoapEnvelope.VER11); + envelope.bodyOut = rpc; + envelope.dotNet = true; + envelope.setOutputSoapObject(rpc); + ht.call("", envelope); + byte[] bb = org.kobjects.base64.Base64.decode(envelope + .getResponse().toString()); + Object ob = IoUtil.byte_obj(bb); + if (ob instanceof DataGrid) {// 判断是否返回结果,因为我这个是一个查询操作,是带有返回值的。 + DataGrid dg = (DataGrid) ob; + Map map = new HashMap(); + if (return_one != null) { + map.put("return_one", return_one); + } + if (audioFld != null) { + map.put("audioFld", audioFld); + } + map.put("dg", dg); + Message msg = new Message(); + msg.obj = map; + msg.arg1 = 1; + handler.sendMessage(msg); + } else { + Message msg = new Message(); + msg.obj = ob.toString(); + msg.what = -1; + handler.sendMessage(msg); + } + } catch (Exception e) { + Message msg = new Message(); + msg.what = -1; + msg.obj = e.toString(); + handler.sendMessage(msg); + } + } +} diff --git a/app/src/main/java/com/example/chaoran/RunYmupThread.java b/app/src/main/java/com/example/chaoran/RunYmupThread.java new file mode 100644 index 0000000..7d0c85f --- /dev/null +++ b/app/src/main/java/com/example/chaoran/RunYmupThread.java @@ -0,0 +1,96 @@ +package com.example.chaoran; + +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import com.sys.SysData; +import com.util.IoUtil; +import org.ksoap2.SoapEnvelope; +import org.ksoap2.serialization.SoapObject; +import org.ksoap2.serialization.SoapSerializationEnvelope; +import org.ksoap2.transport.HttpTransportSE; + +public class RunYmupThread extends Thread { + private String param; + private Handler handler; + private String methodName; + private int urlTy;// 0表示访问ServiceInterface,1表示访问offLineInventoryInterface + + public RunYmupThread(String param, Handler handler, String methodName, + int urlTy) { + this.param = param; + this.handler = handler; + this.methodName = methodName; + this.urlTy = urlTy; + } + + public void run() { + super.run(); + Log.v("SearchThread", "run执行"); + try { + String url = null; + if (urlTy == 0) { + url = SysData.url + "/webservice/ServiceInterface?wsdl"; + } else if (urlTy == 1) { + url = SysData.url + + "/webservice/offLineInventoryInterface?wsdl"; + } + String method = methodName; + SoapObject rpc = new SoapObject("", method); + if (param != null) { + rpc.addProperty("param", param); + } + HttpTransportSE ht = new HttpTransportSE(url, SysData.timeout); + ht.debug = true; + SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( + SoapEnvelope.VER11); + envelope.bodyOut = rpc; + envelope.dotNet = true; + envelope.setOutputSoapObject(rpc); + ht.call("", envelope); + if (envelope.getResponse() != null) {// 判断是否返回结果,因为我这个是一个查询操作,是带有返回值的。 + // byte[] bb = org.kobjects.base64.Base64.decode(envelope + // .getResponse().toString()); + // Map map= (Map)IoUtil.byte_obj(bb); + // Message msg = new Message(); + // msg.obj = map; + // msg.arg1=2; + // handler.sendMessage(msg); + Message msg = new Message(); + if (methodName.equals("saveDj")) { + msg.arg1 = 3; + msg.obj = envelope.getResponse().toString(); + } else if (methodName.equals("pdaRegister")) { + msg.obj = envelope.getResponse().toString(); + } else { + byte[] bb = org.kobjects.base64.Base64.decode(envelope + .getResponse().toString()); + msg.obj = IoUtil.byte_obj(bb); + if (methodName.equals("runYmup")) { + msg.arg1 = 2; + } else if (methodName.equals("runTqfa")) { + msg.arg1 = 4; + } + } + handler.sendMessage(msg); + } else { + Message msg = new Message(); + msg.obj = null; + handler.sendMessage(msg); + } + } catch (Exception e) { + Message msg = new Message(); + if (methodName.equals("runYmup")) { + msg.what = -2; + } else if (methodName.equals("saveDj")) { + msg.what = -3; + } else if (methodName.equals("runTqfa")) { + msg.what = -4; + }else{ + msg.what = -1; + } + msg.obj = e.toString(); + handler.sendMessage(msg); + } + } +} diff --git a/app/src/main/java/com/example/chaoran/SearchThread.java b/app/src/main/java/com/example/chaoran/SearchThread.java new file mode 100644 index 0000000..93f8ab5 --- /dev/null +++ b/app/src/main/java/com/example/chaoran/SearchThread.java @@ -0,0 +1,69 @@ +package com.example.chaoran; + +import org.ksoap2.SoapEnvelope; +import org.ksoap2.serialization.SoapObject; +import org.ksoap2.serialization.SoapSerializationEnvelope; +import org.ksoap2.transport.HttpTransportSE; +import com.sys.SysData; + +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +/** + * 搜索线程 + */ +public class SearchThread extends Thread { + private String fangalx; + private String functionname; + private Handler handler; + private int type;// 0 表示检索方案 1表示 页面修改方案,2表示提取方案 + + public SearchThread(String fangalx, String functionname, Handler handler, + int type) { + this.fangalx = fangalx; + this.functionname = functionname; + this.handler = handler; + this.type = type; + } + + public void run() { + super.run(); + Log.v("SearchThread", "run执行"); + try { + String url = SysData.url + + "/webservice/ServiceInterface?wsdl"; + String method = null; + if (type == 0) { + method = "queryZdysql"; + } else if(type==1) { + method = "selectYmupSql"; + }else if(type==2) { + method = "selectDjtqFun"; + } + SoapObject rpc = new SoapObject("", method); + rpc.addProperty("fangalx", fangalx); + rpc.addProperty("functionname", functionname); + HttpTransportSE ht = new HttpTransportSE(url,SysData.timeout); + ht.debug = true; + SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( + SoapEnvelope.VER11); + envelope.bodyOut = rpc; + envelope.dotNet = true; + envelope.setOutputSoapObject(rpc); + ht.call("", envelope); + if (envelope.getResponse() != null) {// 判断是否返回结果,因为我这个是一个查询操作,是带有返回值的。 + Message msg = new Message(); + msg.obj = org.kobjects.base64.Base64.decode(envelope + .getResponse().toString()); + msg.arg1 = type; + handler.sendMessage(msg); + } + } catch (Exception e) { + Message msg = new Message(); + msg.what = -1; + msg.obj = e.toString(); + handler.sendMessage(msg); + } + } +} diff --git a/app/src/main/java/com/example/chaoran/UpdatePwdActivity.java b/app/src/main/java/com/example/chaoran/UpdatePwdActivity.java new file mode 100644 index 0000000..fa51271 --- /dev/null +++ b/app/src/main/java/com/example/chaoran/UpdatePwdActivity.java @@ -0,0 +1,83 @@ +package com.example.chaoran; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.widget.EditText; +import com.chaoran.thread.UpdatePwdThread; +import com.sys.SysData; +import com.util.DialogUtil; + +/** + * 更新密码窗口 + */ +public class UpdatePwdActivity extends Activity { + private EditText newPwd; + private EditText CfNewPwd; + public ProgressDialog pd; + private Handler handler = new Handler() { + @Override + // 当有消息发送出来的时候就执行Handler的这个方法 + public void handleMessage(Message msg) { + if (pd != null) { + pd.dismiss(); + } + if (msg.what == -1) { + DialogUtil.builder(UpdatePwdActivity.this, "错误信息", msg.obj.toString(),0); + }else{ + if(msg.obj.equals("0")){ + DialogUtil.builder(UpdatePwdActivity.this, "提示信息","修改密码成功",0); + }else{ + DialogUtil.builder(UpdatePwdActivity.this, "错误信息","修改密码失败".concat( msg.obj.toString()),0); + } + + } + } + + }; + + @Override + public void onCreate(Bundle savedInstaneceState) { + super.onCreate(savedInstaneceState); + setContentView(R.layout.activity_update_pwd); + ((EditText)findViewById(R.id.name)).setText(SysData.lgnname); + newPwd=(EditText)findViewById(R.id.newpwd); + CfNewPwd=(EditText)findViewById(R.id.cfnewpwd); + newPwd.requestFocus(); + } + public void onsub(View v) { + String newPwdValue=newPwd.getText().toString().trim(); + if(newPwdValue.equals("")){ + DialogUtil.builder(this, "错误信息", "请填写新密码!",0); + newPwd.requestFocus(); + return; + } + String CfNewPwdValue=CfNewPwd.getText().toString().trim(); + if(CfNewPwdValue.equals("")){ + DialogUtil.builder(this, "错误信息", "请填写重复密码!",0); + CfNewPwd.requestFocus(); + return; + } + if(!CfNewPwdValue.equals(newPwdValue)){ + DialogUtil.builder(this, "错误信息", "新密码和重复密码不一致!",0); + newPwd.requestFocus(); + return; + } + if (pd == null) { + pd = ProgressDialog.show(this, "提示", "正在操作……"); + } else { + DialogUtil.setDialog(pd, "提示", "正在操作……"); + } + new Thread(new UpdatePwdThread(handler,SysData.userid,newPwdValue)).start(); + } + protected void onDestroy() { + super.onDestroy(); + if (pd != null) { + pd=null; + } + handler=null; + } +} diff --git a/app/src/main/java/com/example/chaoran/VoiceSettingActivity.java b/app/src/main/java/com/example/chaoran/VoiceSettingActivity.java new file mode 100644 index 0000000..a413c26 --- /dev/null +++ b/app/src/main/java/com/example/chaoran/VoiceSettingActivity.java @@ -0,0 +1,139 @@ +package com.example.chaoran; + +/* + ********************************************** + * DATE PERSON REASON + * 2021-02-05 FXY Created + ********************************************** + */ + + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.AttributeSet; +import android.view.View; +import android.widget.*; +import com.vioce.TekVoiceEngine; +import com.vioce.VoiceEngine; + +/** + * 播报语音设置 + */ +public class VoiceSettingActivity extends Activity { + + private EditText testText; + private RadioButton voiceF, voiceY; + private SeekBar voiceSize, voiceSpeed, voiceIndicate; + private Button save, cancel; + private SharedPreferences sharedPreferences; + private RadioGroup voiceMemberGroup; + + private VoiceEngine voiceEngine; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_voice); + initView(); + initData(); + initListener(); + } + + private void initView() { + testText = findViewById(R.id.voice_test_text); + voiceF = findViewById(R.id.voice_member_xiaofeng); + voiceY = findViewById(R.id.voice_member_xiaoyan); + voiceSize = findViewById(R.id.voice_size); + voiceSpeed = findViewById(R.id.voice_speed); + voiceIndicate = findViewById(R.id.voice_indicate); + save = findViewById(R.id.save_voice_setting); + cancel = findViewById(R.id.cancel_voice_setting); + voiceMemberGroup = findViewById(R.id.voice_member_group); + voiceEngine = new TekVoiceEngine(this); + } + + private void initData() { + sharedPreferences = getSharedPreferences("voiceEngine", MODE_PRIVATE); + //设置测试文本 + testText.setText(sharedPreferences.getString("testText", testText.getText().toString())); + //设置播报人员 + String voiceMember = sharedPreferences.getString("voiceMember", "xiaofeng"); + if (voiceMember.equals("xiaofeng")) { + voiceF.setChecked(true); + voiceY.setChecked(false); + } else { + voiceY.setChecked(true); + voiceF.setChecked(false); + } + //设置功能选项 + voiceSize.setProgress(sharedPreferences.getInt("voiceSize", 100)); + voiceSpeed.setProgress(sharedPreferences.getInt("voiceSpeed", 80)); + voiceIndicate.setProgress(sharedPreferences.getInt("voiceIndicate", 50)); + } + + public void initListener() { + SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + //停止播放 + voiceEngine.stopSpeaking(); + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + //播放语音 + voiceEngine.setParam(voiceF.isChecked() ? "xiaofeng" : "xiaoyan", voiceSize.getProgress(), voiceIndicate.getProgress(), voiceSpeed.getProgress()); + voiceEngine.startSpeaking(testText.getText().toString()); + } + }; + voiceSize.setOnSeekBarChangeListener(seekBarChangeListener); + voiceIndicate.setOnSeekBarChangeListener(seekBarChangeListener); + voiceSpeed.setOnSeekBarChangeListener(seekBarChangeListener); + SharedPreferences.Editor editor = sharedPreferences.edit(); + save.setOnClickListener(a -> { + editor.putInt("voiceSize", voiceSize.getProgress()); + editor.putInt("voiceIndicate", voiceIndicate.getProgress()); + editor.putInt("voiceSpeed", voiceSpeed.getProgress()); + editor.putString("testText", testText.getText().toString()); + editor.putString("voiceMember", voiceF.isChecked() ? "xiaofeng" : "xiaoyan"); + editor.commit(); + voiceEngine.stopSpeaking(); + voiceEngine.destroy(); + Toast.makeText(this, "语音配置保存成功!", Toast.LENGTH_SHORT).show(); + this.finish(); + }); + cancel.setOnClickListener(a -> { + voiceEngine.stopSpeaking(); + voiceEngine.destroy(); + this.finish(); + }); + + voiceMemberGroup.setOnCheckedChangeListener((a, b) -> { + //播放语音 + voiceEngine.setParam(voiceF.isChecked() ? "xiaofeng" : "xiaoyan", voiceSize.getProgress(), voiceIndicate.getProgress(), voiceSpeed.getProgress()); + voiceEngine.startSpeaking(testText.getText().toString()); + }); + } + + @Override + protected void onStart() { + super.onStart(); + //初始化加载一次 + voiceEngine.setParam(voiceF.isChecked() ? "xiaofeng" : "xiaoyan", voiceSize.getProgress(), voiceIndicate.getProgress(), voiceSpeed.getProgress()); + voiceEngine.startSpeaking(testText.getText().toString()); + } + + @Override + protected void onDestroy() { + voiceEngine.stopSpeaking(); + voiceEngine.destroy(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/jiebao/h518/scan/BeepManager.java b/app/src/main/java/com/jiebao/h518/scan/BeepManager.java index 3086abc..7791cf9 100644 --- a/app/src/main/java/com/jiebao/h518/scan/BeepManager.java +++ b/app/src/main/java/com/jiebao/h518/scan/BeepManager.java @@ -10,7 +10,7 @@ import android.util.Log; import java.io.IOException; -import com.activity.chaoran.R; +import com.example.chaoran.R; diff --git a/app/src/main/java/com/jiebao/h518/scan/DiemensionalCodeControler.java b/app/src/main/java/com/jiebao/h518/scan/DiemensionalCodeControler.java index cd5d64f..83ce0f6 100644 --- a/app/src/main/java/com/jiebao/h518/scan/DiemensionalCodeControler.java +++ b/app/src/main/java/com/jiebao/h518/scan/DiemensionalCodeControler.java @@ -1,10 +1,17 @@ package com.jiebao.h518.scan; -import android.app.Activity; -import android.util.Log; +import com.jiebao.h518.scan.BeepManager; import com.motorolasolutions.adc.decoder.BarCodeReader; +import android.app.Activity; +import android.content.Context; +import android.media.AudioManager; +import android.media.SoundPool; +import android.media.ToneGenerator; +import android.util.Log; +import android.widget.SlidingDrawer; + public class DiemensionalCodeControler implements BarCodeReader.DecodeCallback { public interface DiemensionalScanListener{ diff --git a/app/src/main/java/com/jiebao/h518/scan/NewScanControler.java b/app/src/main/java/com/jiebao/h518/scan/NewScanControler.java index 0b80745..533615e 100644 --- a/app/src/main/java/com/jiebao/h518/scan/NewScanControler.java +++ b/app/src/main/java/com/jiebao/h518/scan/NewScanControler.java @@ -15,7 +15,7 @@ public class NewScanControler { private InputStream mInputStream; public NewScanControler() throws SecurityException, IOException { - mSerialPort = new SerialPort(new File("/dev/ttySAC1"), 9600, 8, 'N', 1, + mSerialPort = new SerialPort(new File("/dev/ttySAC1"), 9600, 0); mOutputStream = mSerialPort.getOutputStream(); mInputStream = mSerialPort.getInputStream(); diff --git a/app/src/main/java/com/jiebao/h518/scan/SqliteService.java b/app/src/main/java/com/jiebao/h518/scan/SqliteService.java index dbb602f..42cb092 100644 --- a/app/src/main/java/com/jiebao/h518/scan/SqliteService.java +++ b/app/src/main/java/com/jiebao/h518/scan/SqliteService.java @@ -1,5 +1,9 @@ package com.jiebao.h518.scan; +import java.util.ArrayList; +import java.util.List; + + import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; diff --git a/app/src/main/java/com/mining/app/zxing/decoding/CaptureActivityHandler.java b/app/src/main/java/com/mining/app/zxing/decoding/CaptureActivityHandler.java index dfd275e..bb566bd 100644 --- a/app/src/main/java/com/mining/app/zxing/decoding/CaptureActivityHandler.java +++ b/app/src/main/java/com/mining/app/zxing/decoding/CaptureActivityHandler.java @@ -27,8 +27,8 @@ import android.os.Handler; import android.os.Message; import android.util.Log; -import com.activity.chaoran.MipcaActivityCapture; -import com.activity.chaoran.R; +import com.example.chaoran.MipcaActivityCapture; +import com.example.chaoran.R; import com.google.zxing.BarcodeFormat; import com.google.zxing.Result; import com.mining.app.zxing.camera.CameraManager; diff --git a/app/src/main/java/com/mining/app/zxing/decoding/DecodeHandler.java b/app/src/main/java/com/mining/app/zxing/decoding/DecodeHandler.java index 3cd2566..1e2e41d 100644 --- a/app/src/main/java/com/mining/app/zxing/decoding/DecodeHandler.java +++ b/app/src/main/java/com/mining/app/zxing/decoding/DecodeHandler.java @@ -23,8 +23,8 @@ import android.os.Looper; import android.os.Message; import android.util.Log; -import com.activity.chaoran.MipcaActivityCapture; -import com.activity.chaoran.R; +import com.example.chaoran.MipcaActivityCapture; +import com.example.chaoran.R; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.MultiFormatReader; diff --git a/app/src/main/java/com/mining/app/zxing/decoding/DecodeThread.java b/app/src/main/java/com/mining/app/zxing/decoding/DecodeThread.java index fe6e18d..7c46e98 100644 --- a/app/src/main/java/com/mining/app/zxing/decoding/DecodeThread.java +++ b/app/src/main/java/com/mining/app/zxing/decoding/DecodeThread.java @@ -23,7 +23,7 @@ import java.util.concurrent.CountDownLatch; import android.os.Handler; import android.os.Looper; -import com.activity.chaoran.MipcaActivityCapture; +import com.example.chaoran.MipcaActivityCapture; import com.google.zxing.BarcodeFormat; import com.google.zxing.DecodeHintType; import com.google.zxing.ResultPointCallback; diff --git a/app/src/main/java/com/mining/app/zxing/view/ViewfinderView.java b/app/src/main/java/com/mining/app/zxing/view/ViewfinderView.java index 467cc0a..56a76b3 100644 --- a/app/src/main/java/com/mining/app/zxing/view/ViewfinderView.java +++ b/app/src/main/java/com/mining/app/zxing/view/ViewfinderView.java @@ -30,7 +30,7 @@ import android.graphics.Typeface; import android.util.AttributeSet; import android.view.View; -import com.activity.chaoran.R; +import com.example.chaoran.R; import com.google.zxing.ResultPoint; import com.mining.app.zxing.camera.CameraManager; diff --git a/app/src/main/java/com/util/DialogUtil.java b/app/src/main/java/com/util/DialogUtil.java index 3cbde99..3a32a75 100644 --- a/app/src/main/java/com/util/DialogUtil.java +++ b/app/src/main/java/com/util/DialogUtil.java @@ -1,7 +1,8 @@ package com.util; import com.chaoran.entiry.SelfEditText; -import com.activity.chaoran.DjActivity; +import com.example.chaoran.DjActivity; +import com.example.chaoran.MainActivity; import android.app.AlertDialog; import android.app.ProgressDialog; @@ -11,6 +12,9 @@ import android.content.DialogInterface.OnClickListener; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.AbsoluteSizeSpan; +import android.util.Log; +import android.widget.ListView; +import android.widget.RelativeLayout; public class DialogUtil { // 错误消息对话框 @@ -31,6 +35,7 @@ public class DialogUtil { @Override public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub if (DjActivity.cr5wScanControl != null && "DjActivity".equals(context.getClass().getSimpleName())) { DjActivity.cr5wScanControl.setIsOpen(true); DjActivity.cr5wScanControl.start(context); @@ -38,6 +43,7 @@ public class DialogUtil { DjActivity.nr510ScanControl.start(context); } else if (DjActivity.barcodeReader != null && "DjActivity".equals(context.getClass().getSimpleName())) { try { + // DjActivity.triggerState = true; DjActivity.barcodeReader.light(true); //turn on/off backlight DjActivity.barcodeReader.aim(true); //开关瞄准线 DjActivity.barcodeReader.decode(true); //开关解码功能 @@ -55,9 +61,8 @@ public class DialogUtil { }); builder.create(); builder.show(); - -// if (DjActivity.cr5wScanControl != null && "DjActivity".equals(context.getClass().getSimpleName())) -// DjActivity.cr5wScanControl.setIsOpen(false); + if (DjActivity.cr5wScanControl != null && "DjActivity".equals(context.getClass().getSimpleName())) + DjActivity.cr5wScanControl.setIsOpen(false); } public static void builderCancel(Context context, String title, diff --git a/app/src/main/java/com/util/DjMenuFun.java b/app/src/main/java/com/util/DjMenuFun.java index a96c04d..b756599 100644 --- a/app/src/main/java/com/util/DjMenuFun.java +++ b/app/src/main/java/com/util/DjMenuFun.java @@ -2,26 +2,30 @@ package com.util; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Map; +import java.text.DateFormat; import map.baidu.com.BDMapActivity; import org.kobjects.base64.Base64; import android.app.AlertDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.view.View; import com.chaoran.imp.InputInterface; -import com.activity.chaoran.DjActivity; -import com.activity.chaoran.ExitThread; -import com.activity.chaoran.MipcaActivityCapture; -import com.activity.chaoran.RunYmupThread; +import com.example.chaoran.DjActivity; +import com.example.chaoran.ExitThread; +import com.example.chaoran.MipcaActivityCapture; +import com.example.chaoran.NetWorkSet; +import com.example.chaoran.RunYmupThread; import com.sys.SysData; public class DjMenuFun { diff --git a/app/src/main/java/com/util/DjUtil.java b/app/src/main/java/com/util/DjUtil.java index 3294614..daaa666 100644 --- a/app/src/main/java/com/util/DjUtil.java +++ b/app/src/main/java/com/util/DjUtil.java @@ -153,11 +153,6 @@ public class DjUtil { for (String s : set) { view = layout.findViewWithTag(s); if (view != null) { - // if (view instanceof SelfEditText) { - // ((SelfEditText) view).setText(map.get(s).toString().trim()); - // } else if (view instanceof TextView) { - // ((TextView) view).setText(map.get(s).toString().trim()); - // } setText(view, map.get(s).toString().trim(), imgHandler, -1, -1); list.add(s); } diff --git a/app/src/main/java/com/util/Dom4jUtil.java b/app/src/main/java/com/util/Dom4jUtil.java index cc9fe09..d213195 100644 --- a/app/src/main/java/com/util/Dom4jUtil.java +++ b/app/src/main/java/com/util/Dom4jUtil.java @@ -2,6 +2,7 @@ package com.util; import java.io.InputStream; import java.lang.reflect.Method; +import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -22,12 +23,19 @@ import com.chaoran.entiry.SelfTextBut; import com.chaoran.entiry.UpdataInfo; import com.chaoran.imp.InputInterface; import com.chaoran.thread.ImageUrl; -import com.activity.chaoran.DjActivity; +import com.example.chaoran.DjActivity; import com.sys.SysData; +import com.example.chaoran.R; +import android.app.Activity; +import android.graphics.Color; +import android.os.Build.VERSION; import android.text.InputType; import android.util.TypedValue; import android.view.Gravity; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; diff --git a/app/src/main/java/com/util/IoUtil.java b/app/src/main/java/com/util/IoUtil.java index c5f34dd..9f02d7d 100644 --- a/app/src/main/java/com/util/IoUtil.java +++ b/app/src/main/java/com/util/IoUtil.java @@ -33,7 +33,7 @@ public class IoUtil { if (bin != null) { bin.close(); } - System.out.println("流关闭---"); + System.out.println("留关闭---"); } } diff --git a/app/src/main/java/com/util/LxParamPageCreate.java b/app/src/main/java/com/util/LxParamPageCreate.java index 5e35d0b..77d36a2 100644 --- a/app/src/main/java/com/util/LxParamPageCreate.java +++ b/app/src/main/java/com/util/LxParamPageCreate.java @@ -17,12 +17,16 @@ import android.widget.TextView; import com.chaoran.component.AntLine; import com.chaoran.component.SelfHRule; +import com.chaoran.entiry.PhotographUi; import com.chaoran.entiry.SelfButton; import com.chaoran.entiry.SelfCheckBox; import com.chaoran.entiry.SelfDateField; import com.chaoran.entiry.SelfEditText; +import com.chaoran.entiry.SelfImage; import com.chaoran.entiry.SelfTextBut; import com.chaoran.imp.InputInterface; +import com.chaoran.thread.ImageUrl; +import com.example.chaoran.DjActivity; import com.sys.SysData; public class LxParamPageCreate { diff --git a/app/src/main/java/com/util/WakeLockUtil.java b/app/src/main/java/com/util/WakeLockUtil.java index 1800eba..be9a266 100644 --- a/app/src/main/java/com/util/WakeLockUtil.java +++ b/app/src/main/java/com/util/WakeLockUtil.java @@ -1,6 +1,5 @@ package com.util; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.net.wifi.WifiManager; @@ -11,7 +10,6 @@ import android.os.PowerManager.WakeLock; public class WakeLockUtil { private static WifiLock wifiLock; - @SuppressLint("InvalidWakeLockTag") public static void acquireWakeLock(Activity activity, WakeLock wakeLock) { if (wakeLock == null) { PowerManager pm = (PowerManager) activity @@ -20,7 +18,7 @@ public class WakeLockUtil { | PowerManager.ACQUIRE_CAUSES_WAKEUP, "crtech"); } if (wifiLock == null) { - WifiManager manager = (WifiManager) activity.getApplicationContext() + WifiManager manager = (WifiManager) activity .getSystemService(Context.WIFI_SERVICE); wifiLock = manager.createWifiLock("SwiFTP"); wifiLock.setReferenceCounted(false); diff --git a/app/src/main/java/com/vioce/TekVoiceEngine.java b/app/src/main/java/com/vioce/TekVoiceEngine.java new file mode 100644 index 0000000..c51974a --- /dev/null +++ b/app/src/main/java/com/vioce/TekVoiceEngine.java @@ -0,0 +1,219 @@ +package com.vioce; + +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.os.Environment; +import android.util.Log; +import android.widget.Toast; +import com.example.chaoran.R; +import com.iflytek.cloud.*; +import com.iflytek.cloud.util.ResourceUtil; +import com.iflytek.cloud.util.ResourceUtil.RESOURCE_TYPE; + +/* + ********************************************** + * DATE PERSON REASON + * 2021-02-05 FXY Created + ********************************************** + */ + +public class TekVoiceEngine implements VoiceEngine { + private static String TAG = "TekVoiceEngine"; + // 语音合成对象 + private SpeechSynthesizer mTts; + + //缓冲进度 + private int mPercentForBuffering = 0; + + //播放进度 + private int mPercentForPlaying = 0; + + private Toast mToast; + + private Context context; + + public TekVoiceEngine(Context context) { + this.context = context; + // 初始化合成对象 + mTts = SpeechSynthesizer.createSynthesizer(context, mTtsInitListener); + //设置合成引擎的参数 + loadParam(); + //初始化对话框 + mToast = Toast.makeText(context, "", Toast.LENGTH_SHORT); + } + + @Override + public void startSpeaking(String text) { + if (null == mTts) { + this.showTip("创建对象失败,请确认 libmsc.so 放置正确,\n 且有调用 createUtility 进行初始化"); + } + + if (mTts.isSpeaking()) + stopSpeaking(); + + int code = mTts.startSpeaking(text, mTtsListener); + if (code != ErrorCode.SUCCESS) { + showTip("语音合成失败,错误码: " + code + ",请点击网址https://www.xfyun.cn/document/error-code查询解决方案"); + } + } + + @Override + public void stopSpeaking() { + mTts.stopSpeaking(); + } + + + /** + * 初始化监听 + */ + private InitListener mTtsInitListener = code -> { + Log.d(TAG, "InitListener init() code = " + code); + if (code != ErrorCode.SUCCESS) { + showTip("初始化失败,错误码:" + code + ",请点击网址https://www.xfyun.cn/document/error-code查询解决方案"); + } + }; + + /** + * 合成回调监听。 + */ + private SynthesizerListener mTtsListener = new SynthesizerListener() { + + @Override + public void onSpeakBegin() { + Log.d(TAG, "开始播放:" + System.currentTimeMillis()); + } + + @Override + public void onSpeakPaused() { + showTip("暂停播放"); + } + + @Override + public void onSpeakResumed() { + showTip("继续播放"); + } + + @Override + public void onBufferProgress(int percent, int beginPos, int endPos, + String info) { + // 合成进度 + mPercentForBuffering = percent; + showTip(String.format(context.getString(R.string.tts_toast_format), + mPercentForBuffering, mPercentForPlaying)); + } + + @Override + public void onSpeakProgress(int percent, int beginPos, int endPos) { + // 播放进度 + mPercentForPlaying = percent; + showTip(String.format(context.getString(R.string.tts_toast_format), + mPercentForBuffering, mPercentForPlaying)); + } + + @Override + public void onCompleted(SpeechError error) { + if (error == null) { + showTip("播放完成"); + } else if (error != null) { + showTip(error.getPlainDescription(true)); + } + } + + @Override + public void onEvent(int eventType, int arg1, int arg2, Bundle obj) { + // 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因 + // 若使用本地能力,会话id为null + if (SpeechEvent.EVENT_SESSION_ID == eventType) { + String sid = obj.getString(SpeechEvent.KEY_EVENT_AUDIO_URL); + Log.d(TAG, "session id =" + sid); + } + } + }; + + + public void loadParam() { + + // 装载参数之前,先清空参数 + mTts.setParameter(SpeechConstant.PARAMS, null); + + SharedPreferences sharedPreferences = context.getSharedPreferences("voiceEngine", Context.MODE_PRIVATE); + + //设置使用本地引擎 + mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL); + + //设置发音人资源路径 + String voicerLocal = sharedPreferences.getString("voiceMember", "xiaofeng"); + mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath(voicerLocal)); + + //设置发音人 + mTts.setParameter(SpeechConstant.VOICE_NAME, voicerLocal); + + //设置合成语速 + mTts.setParameter(SpeechConstant.SPEED, String.valueOf(sharedPreferences.getInt("voiceSpeed", 80))); + + //设置合成音调 + mTts.setParameter(SpeechConstant.PITCH, String.valueOf(sharedPreferences.getInt("voiceIndicate", 50))); + + //设置合成音量 + mTts.setParameter(SpeechConstant.VOLUME, String.valueOf(sharedPreferences.getInt("voiceSize", 100))); + + //设置播放器音频流类型 + mTts.setParameter(SpeechConstant.STREAM_TYPE, "3"); + + // 设置播放合成音频打断音乐播放,默认为true + mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true"); + + // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限 + mTts.setParameter(SpeechConstant.AUDIO_FORMAT, "wav"); + + mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/tts.wav"); + } + + @Override + public void setParam(String voiceMember, Integer voiceSize, Integer voiceIndicate, Integer voiceSpeed) { + if (null != voiceMember) { + //设置发音人资源路径 + mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath(voiceMember)); + //设置发音人 + mTts.setParameter(SpeechConstant.VOICE_NAME, voiceMember); + } + if (null != voiceSize) { + //设置合成音量 + mTts.setParameter(SpeechConstant.VOLUME, String.valueOf(voiceSize)); + } + if (null != voiceIndicate) { + //设置合成音调 + mTts.setParameter(SpeechConstant.PITCH, String.valueOf(voiceIndicate)); + } + if (null != voiceSpeed) { + //设置合成语速 + mTts.setParameter(SpeechConstant.SPEED, String.valueOf(voiceSpeed)); + } + } + + + private void showTip(String str) { + mToast.setText(str); + mToast.show(); + } + + //获取发音人资源路径 + private String getResourcePath(String voiceMember) { + StringBuffer tempBuffer = new StringBuffer(); + String type = "tts"; + //合成通用资源 + tempBuffer.append(ResourceUtil.generateResourcePath(context, RESOURCE_TYPE.assets, type.concat("/common.jet"))); + tempBuffer.append(";"); + tempBuffer.append(ResourceUtil.generateResourcePath(context, RESOURCE_TYPE.assets, type.concat("/").concat(voiceMember).concat(".jet"))); + return tempBuffer.toString(); + } + + public void destroy() { + if (null != mTts) { + mTts.stopSpeaking(); + // 退出时释放连接 + mTts.destroy(); + } + } +} diff --git a/app/src/main/java/com/vioce/VoiceEngine.java b/app/src/main/java/com/vioce/VoiceEngine.java new file mode 100644 index 0000000..fd6316c --- /dev/null +++ b/app/src/main/java/com/vioce/VoiceEngine.java @@ -0,0 +1,27 @@ +package com.vioce; + +/* + ********************************************** + * DATE PERSON REASON + * 2021-02-05 FXY Created + ********************************************** + */ + + +public interface VoiceEngine { + + //开始说话 + public void startSpeaking(String text); + + //停止说话 + public void stopSpeaking(); + + //销毁资源 + public void destroy(); + + //装载参数,从配置文件中装载参数 + public void loadParam(); + + //设置参数 + public void setParam(String voiceMember, Integer voiceSize, Integer voiceIndicate, Integer voiceSpeed); +} diff --git a/app/src/main/java/map/baidu/com/BDMapActivity.java b/app/src/main/java/map/baidu/com/BDMapActivity.java index aa1dfd3..e3f3dbb 100644 --- a/app/src/main/java/map/baidu/com/BDMapActivity.java +++ b/app/src/main/java/map/baidu/com/BDMapActivity.java @@ -9,7 +9,7 @@ import android.widget.ZoomControls; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.mapapi.*; -import com.activity.chaoran.R; +import com.example.chaoran.R; import com.util.DialogUtil; import java.util.HashMap; diff --git a/app/src/main/java/map/baidu/com/BMapManagerUtil.java b/app/src/main/java/map/baidu/com/BMapManagerUtil.java index 9b0af7c..d2f308b 100644 --- a/app/src/main/java/map/baidu/com/BMapManagerUtil.java +++ b/app/src/main/java/map/baidu/com/BMapManagerUtil.java @@ -1,61 +1,72 @@ package map.baidu.com; import android.app.Application; +import android.content.Context; import android.widget.Toast; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKEvent; import com.baidu.mapapi.MKGeneralListener; +import com.example.chaoran.R; +import com.iflytek.cloud.SpeechConstant; +import com.iflytek.cloud.SpeechUtility; public class BMapManagerUtil extends Application { - private static BMapManagerUtil bMapManagerUtil; - // 百度MapAPI的管理类 - public BMapManager mBMapMan = null; + private static BMapManagerUtil bMapManagerUtil; + // 百度MapAPI的管理类 + public BMapManager mBMapMan = null; - // 授权Key - // TODO: 请输入您的Key, - // 申请地址:http://dev.baidu.com/wiki/static/imap/key/ - public String mStrKey = "F49D31823069482466999FADEE70C34C80055379"; - private boolean m_bKeyRight = true; // 授权Key正确,验证通过 + // 授权Key + // 申请地址:http://dev.baidu.com/wiki/static/imap/key/ + public String mStrKey = "F49D31823069482466999FADEE70C34C80055379"; - // 常用事件监听,用来处理通常的网络错误,授权验证错误等 - static class MyGeneralListener implements MKGeneralListener { - @Override - public void onGetNetworkState(int iError) { - Toast.makeText(bMapManagerUtil.getApplicationContext(), "您的网络出错啦!", - Toast.LENGTH_LONG).show(); - } + // 常用事件监听,用来处理通常的网络错误,授权验证错误等 + static class MyGeneralListener implements MKGeneralListener { + @Override + public void onGetNetworkState(int iError) { + Toast.makeText(bMapManagerUtil.getApplicationContext(), "您的网络出错啦!", + Toast.LENGTH_LONG).show(); + } - @Override - public void onGetPermissionState(int iError) { - if (iError == MKEvent.ERROR_PERMISSION_DENIED) { - // 授权Key错误: - Toast.makeText(bMapManagerUtil.getApplicationContext(), - "请在BMapApiDemoApp.java文件输入正确的授权Key!", Toast.LENGTH_LONG) - .show(); - bMapManagerUtil.m_bKeyRight = false; + @Override + public void onGetPermissionState(int iError) { + if (iError == MKEvent.ERROR_PERMISSION_DENIED) { + // 授权Key错误: + Toast.makeText(bMapManagerUtil.getApplicationContext(), + "请在BMapApiDemoApp.java文件输入正确的授权Key!", Toast.LENGTH_LONG) + .show(); + } + } - } - } + } - } + @Override + public void onCreate() { + bMapManagerUtil = this; + mBMapMan = new BMapManager(this); + mBMapMan.init(this.mStrKey, new MyGeneralListener()); - @Override - public void onCreate() { - bMapManagerUtil = this; - mBMapMan = new BMapManager(this); - mBMapMan.init(this.mStrKey, new MyGeneralListener()); - super.onCreate(); - } + //讯飞离线语音配置 + StringBuffer param = new StringBuffer(); + param.append("appid=" + getString(R.string.app_id)); + param.append(","); + // 设置使用v5+ + param.append(SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC); + SpeechUtility.createUtility(this, param.toString()); + super.onCreate(); + } + + @Override + // 建议在您app的退出之前调用mapadpi的destroy()函数,避免重复初始化带来的时间消耗 + public void onTerminate() { + if (mBMapMan != null) { + mBMapMan.destroy(); + mBMapMan = null; + } + super.onTerminate(); + } + + public static Context getGlobalApplicationContext() { + return bMapManagerUtil.getApplicationContext(); + } - @Override - // 建议在您app的退出之前调用mapadpi的destroy()函数,避免重复初始化带来的时间消耗 - public void onTerminate() { - // TODO Auto-generated method stub - if (mBMapMan != null) { - mBMapMan.destroy(); - mBMapMan = null; - } - super.onTerminate(); - } - } diff --git a/app/src/main/res/layout/activity_net_work_set.xml b/app/src/main/res/layout/activity_net_work_set.xml index c5446dd..dc7e099 100644 --- a/app/src/main/res/layout/activity_net_work_set.xml +++ b/app/src/main/res/layout/activity_net_work_set.xml @@ -1,206 +1,213 @@ - - + android:layout_gravity="center"> - - - - - - - - - - - - - - - - - - - - - - + android:layout_below="@+id/title" + android:layout_centerHorizontal="true" + android:orientation="horizontal"> + + + android:id="@+id/ip" + android:layout_width="200dip" + android:layout_height="wrap_content" + android:hint="请输入IP地址" + android:singleLine="true" /> + android:id="@+id/portline" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/ipline" + android:layout_centerHorizontal="true" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + +