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 | \ No newline at end of file | 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 | +} |