Commit 5acca6a80410e0eb15a0f0175d0962117e60efca
1 parent
72876d86
畅游通核销app: 1.补漏上次未上传
Showing
15 changed files
with
951 additions
and
0 deletions
libs/android-logging-log4j-1.0.3.jar
0 → 100644
No preview for this file type
libs/armeabi-v7a/libPosApi.so
0 → 100644
No preview for this file type
libs/log4j-1.2.17.jar
0 → 100644
No preview for this file type
libs/zypos1.8.jar
0 → 100644
No preview for this file type
res/drawable-hdpi/black_idcard.jpg
0 → 100644
68.5 KB
res/drawable-xhdpi/black_idcard.jpg
0 → 100644
68.5 KB
res/layout/activity_black_idcard.xml
0 → 100644
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + android:layout_width="match_parent" | |
4 | + android:layout_height="match_parent" | |
5 | + android:orientation="vertical" | |
6 | + android:background="@color/white"> | |
7 | + | |
8 | + <include layout="@layout/app_top_title" /> | |
9 | + | |
10 | + <LinearLayout | |
11 | + android:id="@+id/llayout" | |
12 | + android:layout_width="match_parent" | |
13 | + android:layout_height="0dp" | |
14 | + android:layout_weight="1" | |
15 | + android:orientation="vertical" | |
16 | + android:weightSum="5"> | |
17 | + | |
18 | + <ImageView | |
19 | + android:layout_width="wrap_content" | |
20 | + android:layout_height="wrap_content" | |
21 | + android:layout_gravity="center_horizontal" | |
22 | + android:layout_weight="4" | |
23 | + android:src="@drawable/black_idcard" /> | |
24 | + | |
25 | + <TextView | |
26 | + android:layout_width="wrap_content" | |
27 | + android:layout_height="wrap_content" | |
28 | + android:layout_gravity="center_horizontal" | |
29 | + android:layout_marginBottom="10dp" | |
30 | + android:alpha="0.8" | |
31 | + android:text="@string/induction_zone" | |
32 | + android:textSize="20sp" /> | |
33 | + </LinearLayout> | |
34 | + | |
35 | +</LinearLayout> | |
0 | 36 | \ No newline at end of file | ... | ... |
src/android_serialport_api/sample/SerialPortActivity.java
0 → 100644
1 | +/* | |
2 | + * Copyright 2009 Cedric Priscal | |
3 | + * | |
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | + * you may not use this file except in compliance with the License. | |
6 | + * You may obtain a copy of the License at | |
7 | + * | |
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | + * | |
10 | + * Unless required by applicable law or agreed to in writing, software | |
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | + * See the License for the specific language governing permissions and | |
14 | + * limitations under the License. | |
15 | + */ | |
16 | + | |
17 | +package android_serialport_api.sample; | |
18 | + | |
19 | +import android.os.Bundle; | |
20 | + | |
21 | +import com.ectrip.cyt.config.DevicTool; | |
22 | +import com.ectrip.cyt.config.MyApp; | |
23 | +import com.ectrip.cyt.ui.BaseActivity; | |
24 | +import com.ectrip.trips.check.R; | |
25 | + | |
26 | +import java.io.IOException; | |
27 | +import java.io.InputStream; | |
28 | +import java.io.OutputStream; | |
29 | +import java.security.InvalidParameterException; | |
30 | + | |
31 | +import android_serialport_api.SerialPort; | |
32 | + | |
33 | +public abstract class SerialPortActivity extends BaseActivity { | |
34 | + | |
35 | + protected MyApp mApplication; | |
36 | + protected SerialPort mSerialPort; | |
37 | + protected OutputStream mOutputStream; | |
38 | + protected InputStream mInputStream; | |
39 | + protected ReadThread mReadThread; | |
40 | + protected int tempFlag = -1; | |
41 | + | |
42 | + private class ReadThread extends Thread { | |
43 | + | |
44 | + @Override | |
45 | + public void run() { | |
46 | + super.run(); | |
47 | + while (!isInterrupted()) { | |
48 | + int size; | |
49 | + try { | |
50 | + byte[] buffer = new byte[1500]; | |
51 | + if (mInputStream == null) { | |
52 | + return; | |
53 | + } | |
54 | +// if(tempFlag==-1){ | |
55 | +// size = mInputStream.read(buffer); | |
56 | +// if (size > 0) { | |
57 | +// onDataReceived(buffer, size); | |
58 | +// } | |
59 | +// } | |
60 | + } catch (Exception e) { | |
61 | + e.printStackTrace(); | |
62 | + return; | |
63 | + } | |
64 | + } | |
65 | + } | |
66 | + } | |
67 | + | |
68 | + private void DisplayError(int resourceId) { | |
69 | +// AlertDialog.Builder b = new AlertDialog.Builder(this); | |
70 | +// b.setTitle("Error"); | |
71 | +// b.setMessage(resourceId); | |
72 | +// b.setPositiveButton("OK", new OnClickListener() { | |
73 | +// public void onClick(DialogInterface dialog, int which) { | |
74 | +//// SerialPortActivity.this.finish(); | |
75 | +// } | |
76 | +// }); | |
77 | +// b.show(); | |
78 | + } | |
79 | + | |
80 | + @Override | |
81 | + protected void onCreate(Bundle savedInstanceState) { | |
82 | + super.onCreate(savedInstanceState); | |
83 | + mApplication = MyApp.getInstance(); | |
84 | + } | |
85 | + | |
86 | + protected abstract void onDataReceived(final byte[] buffer, final int size); | |
87 | + | |
88 | + @Override | |
89 | + protected void onDestroy() { | |
90 | + if (DevicTool.isHiboryPos()) { | |
91 | + if (mReadThread != null) | |
92 | + mReadThread.interrupt(); | |
93 | + mApplication.closeSerialPort(); | |
94 | + mSerialPort = null; | |
95 | + } | |
96 | + super.onDestroy(); | |
97 | + } | |
98 | + | |
99 | + @Override | |
100 | + protected void onResume() { | |
101 | + // TODO Auto-generated method stub | |
102 | + super.onResume(); | |
103 | + try { | |
104 | + if (DevicTool.isHiboryPos()) { | |
105 | + mSerialPort = mApplication.getSerialPort(); | |
106 | + mOutputStream = mSerialPort.getOutputStream(); | |
107 | + mInputStream = mSerialPort.getInputStream(); | |
108 | + /* Create a receiving thread */ | |
109 | + if (mReadThread == null) { | |
110 | + mReadThread = new ReadThread(); | |
111 | + mReadThread.start(); | |
112 | + } | |
113 | + } | |
114 | + | |
115 | + } catch (SecurityException e) { | |
116 | + DisplayError(R.string.error_security); | |
117 | + } catch (IOException e) { | |
118 | + DisplayError(R.string.error_unknown); | |
119 | + } catch (InvalidParameterException e) { | |
120 | + DisplayError(R.string.error_configuration); | |
121 | + } | |
122 | + } | |
123 | + | |
124 | +} | ... | ... |
src/com/ectrip/cyt/center/PosApiHandle.java
0 → 100644
1 | +package com.ectrip.cyt.center; | |
2 | + | |
3 | +import android.content.Context; | |
4 | +import android.os.Build; | |
5 | +import android.os.Handler; | |
6 | +import android.posapi.PosApi; | |
7 | +import android.posapi.PrintQueue; | |
8 | +import android.widget.Toast; | |
9 | + | |
10 | +import com.ectrip.cyt.config.MyApp; | |
11 | + | |
12 | +import zyapi.CommonApi; | |
13 | + | |
14 | + | |
15 | +public class PosApiHandle { | |
16 | + | |
17 | + private PosApi mPosSDK = null; | |
18 | + private PrintQueue mPrintQueue = null; | |
19 | + CommonApi mCommonApi; | |
20 | + private static PosApiHandle posApiHandle; | |
21 | + public static PosApiHandle getInstance(){ | |
22 | + if (posApiHandle==null){ | |
23 | + posApiHandle = new PosApiHandle(); | |
24 | + } | |
25 | + return posApiHandle; | |
26 | + } | |
27 | + private int mComFd = -1; | |
28 | + public PosApiHandle initIDread(){ | |
29 | + mCommonApi = new CommonApi(); | |
30 | + new Handler().postDelayed(new Runnable() { | |
31 | + @Override | |
32 | + public void run() { | |
33 | + // TODO Auto-generated method stub | |
34 | + mCommonApi.setGpioOut(53, 1); | |
35 | + | |
36 | + mCommonApi.setGpioOut(83, 1); | |
37 | + | |
38 | + int ret1 = mCommonApi.setGpioOut(68, 1); | |
39 | + | |
40 | + if (ret1 == 0) { | |
41 | + Toast.makeText(MyApp.getInstance(), "设置成功", Toast.LENGTH_SHORT).show(); | |
42 | + | |
43 | + } else { | |
44 | + Toast.makeText(MyApp.getInstance(), "设置失败", Toast.LENGTH_SHORT).show(); | |
45 | + } | |
46 | + } | |
47 | + }, 1000); | |
48 | + return posApiHandle; | |
49 | + } | |
50 | + | |
51 | + public PosApiHandle initSdk(Context context){ | |
52 | + // 获取PosApi实例 | |
53 | + mPosSDK = PosApi.getInstance(context); | |
54 | + mPrintQueue = new PrintQueue(context, mPosSDK); | |
55 | + // 打印队列初始化 | |
56 | + mPrintQueue.init(); | |
57 | + mPrintQueue.close(); | |
58 | + | |
59 | + // 根据型号进行初始化mPosApi类 | |
60 | + if (Build.MODEL.contains("LTE") | |
61 | + || Build.DISPLAY.contains("3508") | |
62 | + || Build.DISPLAY.contains("403") | |
63 | + || Build.DISPLAY.contains("35S09")) { | |
64 | + mPosSDK.initPosDev("ima35s09"); | |
65 | + } else if (Build.MODEL.contains("5501")) { | |
66 | + mPosSDK.initPosDev("ima35s12"); | |
67 | + } else { | |
68 | + mPosSDK.initPosDev(PosApi.PRODUCT_MODEL_IMA80M01); | |
69 | + } | |
70 | + | |
71 | + //监听初始化回调结果 | |
72 | + mPosSDK.setOnComEventListener(mCommEventListener); | |
73 | + return posApiHandle; | |
74 | + } | |
75 | + | |
76 | + public PrintQueue getmPrintQueue() { | |
77 | + return mPrintQueue; | |
78 | + } | |
79 | + | |
80 | + public PosApi getPosApi(){ | |
81 | + return mPosSDK; | |
82 | + } | |
83 | + | |
84 | + public void closeApi(){ | |
85 | + // 关闭下层串口以及打印机 | |
86 | + if (mPosSDK!=null) | |
87 | + mPosSDK.closeDev(); | |
88 | + if (mCommonApi != null) { | |
89 | + mCommonApi.setGpioDir(83, 1); | |
90 | + mCommonApi.setGpioOut(83, 0); | |
91 | + //设置启用GPIO口为53,也就是使GPIO 53口生效 | |
92 | + mCommonApi.setGpioDir(53, 1); | |
93 | + //拉低53口电压,断开对身份证模块的供电 | |
94 | + mCommonApi.setGpioOut(53, 0); | |
95 | +// Toast.makeText(getApplicationContext(), "退出", 0).show(); | |
96 | +// mCommonApi.setGpioDir(68,1); | |
97 | +// mCommonApi.setGpioOut(68,0); | |
98 | + //关闭mCommonApi类 | |
99 | + mCommonApi.closeCom(mComFd); | |
100 | + } | |
101 | + | |
102 | + } | |
103 | + | |
104 | + public void openScan(){ | |
105 | + // 必须延迟一秒,否则将会出现第一次扫描和打印延迟的现象 | |
106 | + new Handler().postDelayed(new Runnable() { | |
107 | + @Override | |
108 | + public void run() { | |
109 | + // TODO Auto-generated method stub | |
110 | + // 打开GPIO,给扫描头上电 | |
111 | + openDevice(); | |
112 | + | |
113 | + } | |
114 | + }, 1000); | |
115 | + } | |
116 | + | |
117 | + // 打开串口以及GPIO口 | |
118 | + private byte mGpioPower = 0x1E;// PB14 | |
119 | + private int mCurSerialNo = 3; // usart3 | |
120 | + private int mBaudrate = 4; // 9600 | |
121 | + private void openDevice() { | |
122 | + // open power | |
123 | + mPosSDK.gpioControl(mGpioPower, 0, 1); | |
124 | + | |
125 | + mPosSDK.extendSerialInit(mCurSerialNo, mBaudrate, 1, 1, 1, 1); | |
126 | + | |
127 | + } | |
128 | + | |
129 | + /** | |
130 | + * 初始化 | |
131 | + */ | |
132 | + PosApi.OnCommEventListener mCommEventListener = new PosApi.OnCommEventListener() { | |
133 | + @Override | |
134 | + public void onCommState(int cmdFlag, int state, byte[] resp, int respLen) { | |
135 | + // TODO Auto-generated method stub | |
136 | + switch (cmdFlag) { | |
137 | + case PosApi.POS_INIT: | |
138 | + if (state == PosApi.COMM_STATUS_SUCCESS) { | |
139 | + Toast.makeText(MyApp.getInstance(), "设备初始化成功", | |
140 | + Toast.LENGTH_SHORT).show(); | |
141 | + } else { | |
142 | + Toast.makeText(MyApp.getInstance(), "设备初始化失败", | |
143 | + Toast.LENGTH_SHORT).show(); | |
144 | + } | |
145 | + break; | |
146 | + } | |
147 | + } | |
148 | + }; | |
149 | + | |
150 | + | |
151 | +} | ... | ... |
src/com/ectrip/cyt/config/AppConfig.java
0 → 100644
1 | +package com.ectrip.cyt.config; | |
2 | + | |
3 | + | |
4 | +import android.os.Environment; | |
5 | + | |
6 | +public class AppConfig { | |
7 | + /** | |
8 | + * 数据文件的根路径 目前定在外部存储卡中 | |
9 | + */ | |
10 | + public static final String BasePath= Environment.getExternalStorageDirectory().getAbsolutePath(); | |
11 | + /** | |
12 | + * 数据库文件夹名称 | |
13 | + */ | |
14 | + private static final String DBDirectoryName = "wltlib"; | |
15 | + /** | |
16 | + * 临时证据文件夹 | |
17 | + */ | |
18 | + public static final String DBDirectoryNameL = "clog"; | |
19 | + | |
20 | + /** | |
21 | + * 总文件夹的路径 | |
22 | + */ | |
23 | + public static final String RootFile = BasePath+"/"+DBDirectoryName+"/"; | |
24 | + /** | |
25 | + * 总文件夹的路径 | |
26 | + */ | |
27 | + public static final String RootFileL = BasePath+"/"+DBDirectoryNameL+"/"; | |
28 | + | |
29 | + public static final String WITLIB = RootFile+"base.dat"; | |
30 | + | |
31 | + public static final String LIC = RootFile+ "license.lic"; | |
32 | + | |
33 | +} | ... | ... |
src/com/ectrip/cyt/exceptionsave/debug/ConfigureLog4J.java
0 → 100644
1 | +package com.ectrip.cyt.exceptionsave.debug; | |
2 | + | |
3 | +/** | |
4 | + * Created by dc on 2017/3/27. | |
5 | + */ | |
6 | + | |
7 | +import android.os.Environment; | |
8 | + | |
9 | +import org.apache.log4j.Level; | |
10 | + | |
11 | +import java.io.File; | |
12 | +import java.util.Date; | |
13 | + | |
14 | +import de.mindpipe.android.logging.log4j.LogConfigurator; | |
15 | + | |
16 | +/** | |
17 | + * 日志设置 | |
18 | + */ | |
19 | + | |
20 | +public class ConfigureLog4J { | |
21 | + //日志级别优先度从高到低:OFF(关闭),FATAL(致命),ERROR(错误),WARN(警告),INFO(信息),DEBUG(调试),ALL(打开所有的日志,我的理解与DEBUG级别好像没有什么区别得) | |
22 | +//Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。 | |
23 | + // "yyyy-MM-dd");// 日志的输出格式 | |
24 | + | |
25 | + public static void configure() { | |
26 | + final LogConfigurator logConfigurator = new LogConfigurator(); | |
27 | + Date nowtime = new Date(); | |
28 | + // String needWriteMessage = myLogSdf.format(nowtime); | |
29 | + //日志文件路径地址:SD卡下myc文件夹log文件夹的test文件 | |
30 | + String fileName = Environment.getExternalStorageDirectory() | |
31 | + + File.separator + "ectripLOG" + File.separator + "log" | |
32 | + + File.separator + "tdos.log"; | |
33 | + //设置文件名 | |
34 | + logConfigurator.setFileName(fileName); | |
35 | + //设置root日志输出级别 默认为DEBUG | |
36 | + logConfigurator.setRootLevel(Level.DEBUG); | |
37 | + // 设置日志输出级别 | |
38 | + logConfigurator.setLevel("org.apache", Level.INFO); | |
39 | + //设置 输出到日志文件的文字格式 默认 %d %-5p [%c{2}]-[%L] %m%n | |
40 | + logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n"); | |
41 | + //设置输出到控制台的文字格式 默认%m%n | |
42 | + logConfigurator.setLogCatPattern("%m%n"); | |
43 | + //设置总文件大小 | |
44 | + logConfigurator.setMaxFileSize(1024 * 1024 * 5); | |
45 | + //设置最大产生的文件个数 | |
46 | + logConfigurator.setMaxBackupSize(50); | |
47 | + //设置所有消息是否被立刻输出 默认为true,false 不输出 | |
48 | + logConfigurator.setImmediateFlush(true); | |
49 | + //是否本地控制台打印输出 默认为true ,false不输出 | |
50 | + logConfigurator.setUseLogCatAppender(true); | |
51 | + //设置是否启用文件附加,默认为true。false为覆盖文件 | |
52 | + logConfigurator.setUseFileAppender(true); | |
53 | + //设置是否重置配置文件,默认为true | |
54 | + logConfigurator.setResetConfiguration(true); | |
55 | + //是否显示内部初始化日志,默认为false | |
56 | + logConfigurator.setInternalDebugging(false); | |
57 | + | |
58 | + logConfigurator.configure(); | |
59 | + | |
60 | + } | |
61 | + | |
62 | +} | ... | ... |
src/com/ectrip/cyt/ui/BlackIdCardActivity.java
0 → 100644
1 | +package com.ectrip.cyt.ui; | |
2 | + | |
3 | +import android.content.Intent; | |
4 | +import android.media.MediaPlayer; | |
5 | +import android.os.Bundle; | |
6 | +import android.os.Handler; | |
7 | +import android.os.Message; | |
8 | +import android.text.TextUtils; | |
9 | +import android.widget.Toast; | |
10 | + | |
11 | +import com.ectrip.cyt.config.DevicTool; | |
12 | +import com.ectrip.cyt.utils.CountDownTimer; | |
13 | +import com.ectrip.cyt.utils.LogUtil; | |
14 | +import com.ectrip.cyt.utils.NationDeal; | |
15 | +import com.ectrip.cyt.utils.SharedPreferences2Obj; | |
16 | +import com.ectrip.trips.check.R; | |
17 | +import com.ivsign.android.IDCReader.IDCReaderSDK; | |
18 | + | |
19 | +import java.io.IOException; | |
20 | +import java.util.Date; | |
21 | + | |
22 | +import android_serialport_api.sample.SerialPortActivity; | |
23 | + | |
24 | +/** | |
25 | + * 作者:dufang on 2023/11/10 10:45 | |
26 | + */ | |
27 | +public class BlackIdCardActivity extends SerialPortActivity { | |
28 | + private Integer type; // 类型 | |
29 | + MediaPlayer player; | |
30 | + | |
31 | + /** | |
32 | + * 执行扫描,扫描后的结果会通过action为PosApi.ACTION_POS_COMM_STATUS的广播发回 | |
33 | + */ | |
34 | + Handler handler = new Handler() { | |
35 | + @Override | |
36 | + public void handleMessage(Message msg) { | |
37 | + super.handleMessage(msg); | |
38 | + | |
39 | + switch (msg.what) { | |
40 | + case 0: | |
41 | + try { | |
42 | + if (Readflage > 0) { | |
43 | + player.start(); | |
44 | + Toast.makeText(BlackIdCardActivity.this, "身份号码:" + decodeInfo[5], Toast.LENGTH_SHORT).show(); | |
45 | + Intent intent = new Intent(BlackIdCardActivity.this, | |
46 | + IDOrderListActivity.class); | |
47 | + CountDownTimer.firstTime = new Date().getTime();// 不必要的可以删除 | |
48 | + intent.putExtra("mode", 0); | |
49 | + intent.putExtra("idcardNumber", decodeInfo[5]); | |
50 | + intent.putExtra("titleName", getString(R.string.order_list)); | |
51 | + startActivity(intent); | |
52 | + } else if (Readflage == -2) { | |
53 | + Toast.makeText(BlackIdCardActivity.this, "连接异常:", Toast.LENGTH_SHORT).show(); | |
54 | + } else if (Readflage == -3) { | |
55 | + Toast.makeText(BlackIdCardActivity.this, "无卡或卡片已读过-3:", Toast.LENGTH_SHORT).show(); | |
56 | + } else if (Readflage == -4) { | |
57 | + Toast.makeText(BlackIdCardActivity.this, "无卡或卡片已读过-4:", Toast.LENGTH_SHORT).show(); | |
58 | + } else if (Readflage == -5) { | |
59 | + Toast.makeText(BlackIdCardActivity.this, "读卡失败:", Toast.LENGTH_SHORT).show(); | |
60 | + } else if (Readflage == -99) { | |
61 | + Toast.makeText(BlackIdCardActivity.this, "操作异常:", Toast.LENGTH_SHORT).show(); | |
62 | + } | |
63 | + | |
64 | + Thread.sleep(100); | |
65 | + } catch (InterruptedException e) { | |
66 | + Toast.makeText(BlackIdCardActivity.this, "读取数据异常:", Toast.LENGTH_SHORT).show(); | |
67 | + } | |
68 | + break; | |
69 | + | |
70 | + case 1: | |
71 | + Toast.makeText(BlackIdCardActivity.this, "发现身份证:", Toast.LENGTH_SHORT).show(); | |
72 | + break; | |
73 | + | |
74 | + case 3: | |
75 | + try { | |
76 | + Bundle bundle = msg.getData(); | |
77 | + String id = bundle.getString("id"); | |
78 | + if (TextUtils.isEmpty(id)) return; | |
79 | + player.start(); | |
80 | +// Toast.makeText(SelectActionActivity.this, "身份号码:" + id, Toast.LENGTH_SHORT).show(); | |
81 | + Intent intent = new Intent(BlackIdCardActivity.this, | |
82 | + IDOrderListActivity.class); | |
83 | + CountDownTimer.firstTime = new Date().getTime();// 不必要的可以删除 | |
84 | + intent.putExtra("mode", 0); | |
85 | + intent.putExtra("idcardNumber", id); | |
86 | + intent.putExtra("titleName", getString(R.string.order_list)); | |
87 | + startActivity(intent); | |
88 | + } catch (IllegalStateException e) { | |
89 | + e.printStackTrace(); | |
90 | + } | |
91 | + break; | |
92 | + default: | |
93 | + break; | |
94 | + } | |
95 | + | |
96 | + | |
97 | + } | |
98 | + }; | |
99 | + | |
100 | + @Override | |
101 | + public void onCreate(Bundle savedInstanceState) { | |
102 | + super.onCreate(savedInstanceState); | |
103 | + setContentView(R.layout.activity_black_idcard); | |
104 | + initIDRead(); | |
105 | + init(); | |
106 | + } | |
107 | + | |
108 | + @Override | |
109 | + protected void onDataReceived(byte[] buffer, int size) { | |
110 | + | |
111 | + } | |
112 | + | |
113 | + private void init() { | |
114 | + type = SharedPreferences2Obj.getInstance(BlackIdCardActivity.this) | |
115 | + .setName("MachineType").getObject("type", Integer.class); | |
116 | + // 扫描提示音 | |
117 | + player = MediaPlayer.create(getApplicationContext(), | |
118 | + R.raw.beep); | |
119 | + } | |
120 | + | |
121 | + private void initIDRead() { | |
122 | + new Thread(new ThreadRun()).start(); | |
123 | + } | |
124 | + | |
125 | + /** | |
126 | + * 读取身份证线程 | |
127 | + */ | |
128 | + private boolean isRun = true; | |
129 | + private boolean isOpen = true; | |
130 | + | |
131 | + private class ThreadRun implements Runnable { | |
132 | + @Override | |
133 | + public void run() { | |
134 | + while (isRun) { | |
135 | + try { | |
136 | + Thread.sleep(200); | |
137 | + if (isOpen) | |
138 | + ReadCard(); | |
139 | + } catch (InterruptedException e) { | |
140 | + // TODO Auto-generated catch block | |
141 | + e.printStackTrace(); | |
142 | + } | |
143 | + } | |
144 | + } | |
145 | + } | |
146 | + | |
147 | + /** | |
148 | + * 读取身份证 | |
149 | + */ | |
150 | + private int Readflage = -99; | |
151 | + byte[] cmd_find = {(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0x96, 0x69, 0x00, 0x03, 0x20, 0x01, 0x22}; | |
152 | + byte[] cmd_selt = {(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0x96, 0x69, 0x00, 0x03, 0x20, 0x02, 0x21}; | |
153 | + byte[] cmd_read = {(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0x96, 0x69, 0x00, 0x03, 0x30, 0x01, 0x32}; | |
154 | + byte[] recData = new byte[1500]; | |
155 | + String[] decodeInfo = new String[10]; | |
156 | + | |
157 | + private void ReadCard() { | |
158 | + try { | |
159 | + LogUtil.d(TAG,"mInputStream"+mInputStream+"\n"+"mOutputStream"+mOutputStream); | |
160 | + if ((mInputStream == null) || (mOutputStream == null)) { | |
161 | + Readflage = -2;// 连接异常 | |
162 | + return; | |
163 | + } | |
164 | + mOutputStream.write(cmd_find); | |
165 | + Thread.sleep(200); | |
166 | + int datalen = mInputStream.read(recData); | |
167 | + if (recData[9] == -97) { | |
168 | + mOutputStream.write(cmd_selt); | |
169 | + Thread.sleep(200); | |
170 | + datalen = mInputStream.read(recData); | |
171 | + if (recData[9] == -112) { | |
172 | + mOutputStream.write(cmd_read); | |
173 | + Thread.sleep(1000); | |
174 | + byte[] tempData = new byte[1500]; | |
175 | + if (mInputStream.available() > 0) { | |
176 | + datalen = mInputStream.read(tempData); | |
177 | + } else { | |
178 | + Thread.sleep(500); | |
179 | + if (mInputStream.available() > 0) { | |
180 | + datalen = mInputStream.read(tempData); | |
181 | + } | |
182 | + } | |
183 | + int flag = 0; | |
184 | + if (datalen < 1294) { | |
185 | + for (int i = 0; i < datalen; i++, flag++) { | |
186 | + recData[flag] = tempData[i]; | |
187 | + } | |
188 | + Thread.sleep(1000); | |
189 | + if (mInputStream.available() > 0) { | |
190 | + datalen = mInputStream.read(tempData); | |
191 | + } else { | |
192 | + Thread.sleep(500); | |
193 | + if (mInputStream.available() > 0) { | |
194 | + datalen = mInputStream.read(tempData); | |
195 | + } | |
196 | + } | |
197 | + for (int i = 0; i < datalen; i++, flag++) { | |
198 | + recData[flag] = tempData[i]; | |
199 | + } | |
200 | + } else { | |
201 | + for (int i = 0; i < datalen; i++, flag++) { | |
202 | + recData[flag] = tempData[i]; | |
203 | + } | |
204 | + } | |
205 | + tempData = null; | |
206 | + if (flag == 1295) { | |
207 | + if (recData[9] == -112) { | |
208 | + | |
209 | + byte[] dataBuf = new byte[256]; | |
210 | + for (int i = 0; i < 256; i++) { | |
211 | + dataBuf[i] = recData[14 + i]; | |
212 | + } | |
213 | + String TmpStr = new String(dataBuf, "UTF16-LE"); | |
214 | + TmpStr = new String(TmpStr.getBytes("UTF-8")); | |
215 | + decodeInfo[0] = TmpStr.substring(0, 15); | |
216 | + decodeInfo[1] = TmpStr.substring(15, 16); | |
217 | + decodeInfo[2] = TmpStr.substring(16, 18); | |
218 | + decodeInfo[3] = TmpStr.substring(18, 26); | |
219 | + decodeInfo[4] = TmpStr.substring(26, 61); | |
220 | + decodeInfo[5] = TmpStr.substring(61, 79); | |
221 | + decodeInfo[6] = TmpStr.substring(79, 94); | |
222 | + decodeInfo[7] = TmpStr.substring(94, 102); | |
223 | + decodeInfo[8] = TmpStr.substring(102, 110); | |
224 | + decodeInfo[9] = TmpStr.substring(110, 128); | |
225 | + if (decodeInfo[1].equals("1")) | |
226 | + decodeInfo[1] = "男"; | |
227 | + else | |
228 | + decodeInfo[1] = "女"; | |
229 | + try { | |
230 | + int code = Integer.parseInt(decodeInfo[2] | |
231 | + .toString()); | |
232 | + decodeInfo[2] = NationDeal.decodeNation(code); | |
233 | + } catch (Exception e) { | |
234 | + decodeInfo[2] = ""; | |
235 | + } | |
236 | + // 照片解码 | |
237 | + try { | |
238 | + int ret = IDCReaderSDK.Init(); | |
239 | + if (ret == 0) { | |
240 | + byte[] datawlt = new byte[1384]; | |
241 | + byte[] byLicData = {(byte) 0x05, | |
242 | + (byte) 0x00, (byte) 0x01, | |
243 | + (byte) 0x00, (byte) 0x5B, | |
244 | + (byte) 0x03, (byte) 0x33, | |
245 | + (byte) 0x01, (byte) 0x5A, | |
246 | + (byte) 0xB3, (byte) 0x1E, | |
247 | + (byte) 0x00}; | |
248 | + for (int i = 0; i < 1295; i++) { | |
249 | + datawlt[i] = recData[i]; | |
250 | + } | |
251 | + int t = IDCReaderSDK.unpack(datawlt, | |
252 | + byLicData); | |
253 | + if (t == 1) { | |
254 | + Readflage = 1;// 读卡成功 | |
255 | + } else { | |
256 | + Readflage = 6;// 照片解码异常 | |
257 | + } | |
258 | + } else { | |
259 | + Readflage = 6;// 照片解码异常 | |
260 | + } | |
261 | + } catch (Exception e) { | |
262 | + Readflage = 6;// 照片解码异常 | |
263 | + } | |
264 | + handler.sendEmptyMessage(0); | |
265 | + } else { | |
266 | + Readflage = -5;// 读卡失败! | |
267 | + } | |
268 | + } else { | |
269 | + Readflage = -5;// 读卡失败 | |
270 | + } | |
271 | + } else { | |
272 | + Readflage = -4;// 选卡失败 | |
273 | + } | |
274 | + } else { | |
275 | + Readflage = -3;// 寻卡失败 | |
276 | + } | |
277 | + } catch (IOException e) { | |
278 | + // TODO Auto-generated catch block | |
279 | + Readflage = -99;// 读取数据异常 | |
280 | + } catch (InterruptedException e) { | |
281 | + // TODO Auto-generated catch block | |
282 | + Readflage = -99;// 读取数据异常 | |
283 | + } | |
284 | + } | |
285 | + | |
286 | + @Override | |
287 | + protected void onDestroy() { | |
288 | + // TODO Auto-generated method stub | |
289 | + super.onDestroy(); | |
290 | + if (DevicTool.isHiboryPos()) { | |
291 | + isRun = false; | |
292 | + } | |
293 | + } | |
294 | +} | ... | ... |
src/com/ectrip/cyt/utils/NationDeal.java
0 → 100644
1 | +package com.ectrip.cyt.utils; | |
2 | + | |
3 | +public class NationDeal { | |
4 | + public static String decodeNation(int code) | |
5 | + { | |
6 | + String nation; | |
7 | + switch (code) | |
8 | + { | |
9 | + case 1: | |
10 | + nation = "汉"; | |
11 | + break; | |
12 | + case 2: | |
13 | + nation = "蒙古"; | |
14 | + break; | |
15 | + case 3: | |
16 | + nation = "回"; | |
17 | + break; | |
18 | + case 4: | |
19 | + nation = "藏"; | |
20 | + break; | |
21 | + case 5: | |
22 | + nation = "维吾尔"; | |
23 | + break; | |
24 | + case 6: | |
25 | + nation = "苗"; | |
26 | + break; | |
27 | + case 7: | |
28 | + nation = "彝"; | |
29 | + break; | |
30 | + case 8: | |
31 | + nation = "壮"; | |
32 | + break; | |
33 | + case 9: | |
34 | + nation = "布依"; | |
35 | + break; | |
36 | + case 10: | |
37 | + nation = "朝鲜"; | |
38 | + break; | |
39 | + case 11: | |
40 | + nation = "满"; | |
41 | + break; | |
42 | + case 12: | |
43 | + nation = "侗"; | |
44 | + break; | |
45 | + case 13: | |
46 | + nation = "瑶"; | |
47 | + break; | |
48 | + case 14: | |
49 | + nation = "白"; | |
50 | + break; | |
51 | + case 15: | |
52 | + nation = "土家"; | |
53 | + break; | |
54 | + case 16: | |
55 | + nation = "哈尼"; | |
56 | + break; | |
57 | + case 17: | |
58 | + nation = "哈萨克"; | |
59 | + break; | |
60 | + case 18: | |
61 | + nation = "傣"; | |
62 | + break; | |
63 | + case 19: | |
64 | + nation = "黎"; | |
65 | + break; | |
66 | + case 20: | |
67 | + nation = "傈僳"; | |
68 | + break; | |
69 | + case 21: | |
70 | + nation = "佤"; | |
71 | + break; | |
72 | + case 22: | |
73 | + nation = "畲"; | |
74 | + break; | |
75 | + case 23: | |
76 | + nation = "高山"; | |
77 | + break; | |
78 | + case 24: | |
79 | + nation = "拉祜"; | |
80 | + break; | |
81 | + case 25: | |
82 | + nation = "水"; | |
83 | + break; | |
84 | + case 26: | |
85 | + nation = "东乡"; | |
86 | + break; | |
87 | + case 27: | |
88 | + nation = "纳西"; | |
89 | + break; | |
90 | + case 28: | |
91 | + nation = "景颇"; | |
92 | + break; | |
93 | + case 29: | |
94 | + nation = "柯尔克孜"; | |
95 | + break; | |
96 | + case 30: | |
97 | + nation = "土"; | |
98 | + break; | |
99 | + case 31: | |
100 | + nation = "达斡尔"; | |
101 | + break; | |
102 | + case 32: | |
103 | + nation = "仫佬"; | |
104 | + break; | |
105 | + case 33: | |
106 | + nation = "羌"; | |
107 | + break; | |
108 | + case 34: | |
109 | + nation = "布朗"; | |
110 | + break; | |
111 | + case 35: | |
112 | + nation = "撒拉"; | |
113 | + break; | |
114 | + case 36: | |
115 | + nation = "毛南"; | |
116 | + break; | |
117 | + case 37: | |
118 | + nation = "仡佬"; | |
119 | + break; | |
120 | + case 38: | |
121 | + nation = "锡伯"; | |
122 | + break; | |
123 | + case 39: | |
124 | + nation = "阿昌"; | |
125 | + break; | |
126 | + case 40: | |
127 | + nation = "普米"; | |
128 | + break; | |
129 | + case 41: | |
130 | + nation = "塔吉克"; | |
131 | + break; | |
132 | + case 42: | |
133 | + nation = "怒"; | |
134 | + break; | |
135 | + case 43: | |
136 | + nation = "乌孜别克"; | |
137 | + break; | |
138 | + case 44: | |
139 | + nation = "俄罗斯"; | |
140 | + break; | |
141 | + case 45: | |
142 | + nation = "鄂温克"; | |
143 | + break; | |
144 | + case 46: | |
145 | + nation = "德昂"; | |
146 | + break; | |
147 | + case 47: | |
148 | + nation = "保安"; | |
149 | + break; | |
150 | + case 48: | |
151 | + nation = "裕固"; | |
152 | + break; | |
153 | + case 49: | |
154 | + nation = "京"; | |
155 | + break; | |
156 | + case 50: | |
157 | + nation = "塔塔尔"; | |
158 | + break; | |
159 | + case 51: | |
160 | + nation = "独龙"; | |
161 | + break; | |
162 | + case 52: | |
163 | + nation = "鄂伦春"; | |
164 | + break; | |
165 | + case 53: | |
166 | + nation = "赫哲"; | |
167 | + break; | |
168 | + case 54: | |
169 | + nation = "门巴"; | |
170 | + break; | |
171 | + case 55: | |
172 | + nation = "珞巴"; | |
173 | + break; | |
174 | + case 56: | |
175 | + nation = "基诺"; | |
176 | + break; | |
177 | + case 97: | |
178 | + nation = "其他"; | |
179 | + break; | |
180 | + case 98: | |
181 | + nation = "外国血统中国籍人士"; | |
182 | + break; | |
183 | + default: | |
184 | + nation = ""; | |
185 | + break; | |
186 | + } | |
187 | + return nation; | |
188 | + } | |
189 | +} | ... | ... |
src/com/ivsign/android/IDCReader/IDCReaderSDK.java
0 → 100644
1 | +package com.ivsign.android.IDCReader; | |
2 | + | |
3 | + | |
4 | +import com.ectrip.cyt.config.AppConfig; | |
5 | + | |
6 | +public class IDCReaderSDK { | |
7 | + | |
8 | + private static final String TAG = "unpack"; | |
9 | + | |
10 | + public IDCReaderSDK() | |
11 | + { | |
12 | + //if( 0==wltInit("") ) | |
13 | + //Log.i(TAG, "wltInit success"); | |
14 | + } | |
15 | + public static int Init() | |
16 | + { | |
17 | + return wltInit(AppConfig.RootFile); | |
18 | + } | |
19 | + public static int unpack(byte[] wltdata, byte[] licdata) | |
20 | + { | |
21 | + return wltGetBMP(wltdata, licdata); | |
22 | + } | |
23 | + | |
24 | + // native functin interface | |
25 | + public static native int wltInit(String workPath); | |
26 | + | |
27 | + public static native int wltGetBMP(byte[] wltdata, byte[] licdata); | |
28 | + | |
29 | + /* this is used to load the 'wltdecode' library on application | |
30 | + */ | |
31 | + static { | |
32 | + System.loadLibrary("wltdecode"); | |
33 | + } | |
34 | +} | ... | ... |
src/zyapi/CommonApi.java
0 → 100644
1 | +package zyapi; | |
2 | + | |
3 | + | |
4 | +public class CommonApi { | |
5 | + private static CommonApi mMe = null; | |
6 | + | |
7 | + public CommonApi() { | |
8 | + } | |
9 | + | |
10 | + // gpio | |
11 | + public native int setGpioMode(int pin, int mode); | |
12 | + public native int setGpioDir(int pin, int dir); | |
13 | + public native int setGpioPullEnable(int pin, int enable); | |
14 | + public native int setGpioPullSelect(int pin, int select); | |
15 | + public native int setGpioOut(int pin, int out); | |
16 | + public native int getGpioIn(int pin); | |
17 | + //serialport | |
18 | + public native int openCom(String port, int baudrate, int bits, char event, int stop); | |
19 | + public native int openComEx(String port, int baudrate, int bits, char event, int stop, int flags); | |
20 | + public native int writeCom(int fd, byte[] buf, int sizes); | |
21 | + public native int readCom(int fd, byte[] buf, int sizes); | |
22 | + public native int readComEx(int fd, byte[] buf, int sizes, int sec, int usec); | |
23 | + public native void closeCom(int fd); | |
24 | + | |
25 | + static { | |
26 | + System.loadLibrary("zyapi_common"); | |
27 | + } | |
28 | + | |
29 | +} | ... | ... |