app/build.gradle | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/libs/ocr-library.aar | 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/AndroidManifest.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/activity/BaseActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/activity/MyActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/net/SocketNet.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/recharge/utils/ExcelUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/activity_new_card.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/activity_test.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/mipmap-xhdpi/icon_scan.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/values/styles.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
gradle.properties | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/build.gradle
@@ -27,35 +27,37 @@ viewBinding { enabled = true; } // repositories { // flatDir { // dirs 'libs' // } // } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') // implementation 'androidx.appcompat:appcompat:1.6.1' // implementation 'com.google.android.material:material:1.10.0' implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'androidx.core:core-ktx:1.8.0' implementation 'androidx.appcompat:appcompat:1.5.0' //room数据库 implementation "androidx.room:room-runtime:2.3.0" implementation "androidx.room:room-ktx:2.3.0" runtimeOnly("androidx.room:room-common:2.3.0") annotationProcessor "androidx.room:room-compiler:2.3.0" // implementation 'com.android.support:appcompat-v7:28.0.0' // implementation('com.jakewharton:butterknife:9.0.0') { // exclude group: 'com.android.support:annotations-v7:28.0.0'; // exclude group: 'android.arch.core:common:1.1.1' // } // implementation project(path: ':pickerviewlibrary') // implementation files('libs\\AMap_Location_V6.2.0_20221026.jar') // annotationProcessor('com.jakewharton:butterknife-compiler:9.0.0') { // exclude group: 'android.arch.core:common:1.1.1' // } // implementation 'com.android.support:support-v4:28.0.0-alpha1' // implementation 'org.xutils:xutils:3.8.5' // implementation files('libs/core-3.3.0.jar') implementation 'com.google.zxing:core:3.4.1' implementation group: 'net.sourceforge.jexcelapi', name: 'jxl', version: '2.6.12' implementation 'com.wang.avi:library:2.1.3' implementation project(':pickerviewlibrary') implementation project(':easysocket') implementation 'com.tencent.bugly:crashreport:latest.release' // 处理图片 // implementation (name: 'ocr-library', ext: 'aar') //权限 implementation ('com.guolindev.permissionx:permissionx:1.7.1'){ exclude group: 'androidx.core'; exclude group: 'androidx.appcompat'; exclude group: 'androidx.annotation'; } } app/libs/ocr-library.aarBinary files differ
app/src/main/AndroidManifest.xml
@@ -63,6 +63,7 @@ <activity android:name=".activity.NewCardActivity" android:exported="true" android:screenOrientation="portrait" android:launchMode="singleTop"> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> app/src/main/java/com/dayu/recharge/activity/BaseActivity.java
@@ -4,6 +4,8 @@ import android.os.Bundle; import android.view.View; import androidx.appcompat.app.AppCompatActivity; import com.dayu.recharge.R; import com.dayu.recharge.dao.AppDatabase; import com.dayu.recharge.dao.BaseDaoSingleton; @@ -13,7 +15,7 @@ * Created by zuoxiao on 2018/12/20. */ public class BaseActivity extends Activity { public class BaseActivity extends AppCompatActivity { public TitleBar titleBar = null; public AppDatabase baseDao; app/src/main/java/com/dayu/recharge/activity/MyActivity.java
@@ -124,11 +124,11 @@ } List listData = new ArrayList(); try { // if (isRechargeList) { // listData = SqLite_DB_Utile.getInit(MyActivity.this).selector(RechargeBean.class).where("date", ">=", beginTime).and("date", "<=", endTime).findAll(); // } else { // listData = SqLite_DB_Utile.getInit(MyActivity.this).selector(UserCardBean.class).where("date", ">=", beginTime).and("date", "<=", endTime).findAll(); // } if (isRechargeList) { listData = baseDao.rechargeDao().findByTime(beginTime, endTime); } else { listData = baseDao.userCardDao().findByTime(beginTime, endTime); } } catch (Exception e) { e.printStackTrace(); } @@ -139,10 +139,10 @@ return; } if (isRechargeList) { title = new String[]{"村号", "用户名", "户号", "充值日期", "充值金额(元)", "剩余金额(元)"}; title = new String[]{"设备序列号", "用户名", "身份证号", "充值日期", "充值金额(元)", "剩余金额(元)"}; fileName = file.toString() + "/" + ExcelUtil.outRechargePathName; } else { title = new String[]{"村号", "用户名", "户号", "注册日期", "电话", "水权内水量", "亩数", "状态"}; title = new String[]{"设备序列号", "用户名", "身份证号", "注册日期", "电话"}; fileName = file.toString() + "/" + ExcelUtil.outUserPathName; } ExcelUtil.initExcel(fileName, title); app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
@@ -1,5 +1,6 @@ package com.dayu.recharge.activity; import android.Manifest; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Intent; @@ -8,6 +9,7 @@ import android.view.LayoutInflater; import android.view.View; import com.msd.ocr.idcard.LibraryInitOCR; import com.dayu.recharge.MyApplication; import com.dayu.recharge.card.UserCard; import com.dayu.recharge.databinding.ActivityNewCardBinding; @@ -26,6 +28,10 @@ import com.dayu.recharge.utils.SocketUtil; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.WSHelper; import com.permissionx.guolindev.PermissionX; import org.json.JSONException; import org.json.JSONObject; import java.util.Arrays; @@ -37,7 +43,7 @@ */ public class NewCardActivity extends BaseNfcActivity { public static final int SCAN_IDCARD_REQUEST = 1; UserCardBean userCardBean; Dialog dialog; @@ -54,9 +60,19 @@ setContentView(newCardBinding.getRoot()); setData(); initView(); LibraryInitOCR.initOCR(NewCardActivity.this); } private void initView() { //身份证识别 newCardBinding.newCardScanBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { rxPermission(); } }); newCardBinding.newCardRegistBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -97,6 +113,67 @@ }); } private void rxPermission() { PermissionX.init(NewCardActivity.this).permissions(Manifest.permission.CAMERA) .onExplainRequestReason((scope, deniedList) -> { // val message = "PermissionX需要您同意以下权限才能正常使用" }) .request((allGranted, grantedList, deniedList) -> { if (allGranted) {//所有申请的权限都已通过 startCamera(); } else {//您拒绝了如下权限:$deniedList } }); } private void startCamera() { Bundle bundle = new Bundle(); bundle.putBoolean("saveImage", false); bundle.putInt("requestCode", SCAN_IDCARD_REQUEST); bundle.putInt("type", 0); //0身份证, 1驾驶证 LibraryInitOCR.startScan(NewCardActivity.this, bundle); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK){ switch (requestCode) { case SCAN_IDCARD_REQUEST: String result = data.getStringExtra("OCRResult"); try { JSONObject jo = new JSONObject(result); // sb.append(String.format("正面 = %s\n", jo.opt("type"))); // sb.append(String.format("姓名 = %s\n", jo.opt("name"))); // sb.append(String.format("性别 = %s\n", jo.opt("sex"))); // sb.append(String.format("民族 = %s\n", jo.opt("folk"))); // sb.append(String.format("日期 = %s\n", jo.opt("birt"))); // sb.append(String.format("号码 = %s\n", jo.opt("num"))); // sb.append(String.format("住址 = %s\n", jo.opt("addr"))); // sb.append(String.format("签发机关 = %s\n", jo.opt("issue"))); // sb.append(String.format("有效期限 = %s\n", jo.opt("valid"))); // sb.append(String.format("整体照片 = %s\n", jo.opt("imgPath"))); // sb.append(String.format("头像路径 = %s\n", jo.opt("headPath"))); newCardBinding.newCardName.setText(jo.opt("name").toString()); newCardBinding.newCardId.setText(jo.opt("num").toString()); newCardBinding.newCardIdTip.setVisibility(View.VISIBLE); } catch (JSONException e) { throw new RuntimeException(e); } break; } } } private void setData() { try { app/src/main/java/com/dayu/recharge/net/SocketNet.java
@@ -132,7 +132,7 @@ // isConnected = false; Log.i("SocketActionListener", "socket连接失败"); if (isTest) { ToastUtil.show(mContext, "连接失败,请检查网络"); // ToastUtil.show(mContext, "连接失败,请检查网络"); } else { if (myCallBack != null) { myCallBack.onSocketError(-1, "socket连接失败,请检查网络"); app/src/main/java/com/dayu/recharge/utils/ExcelUtil.java
@@ -129,27 +129,19 @@ List<String> list = new ArrayList<>(); if (objList.get(j) instanceof RechargeBean) { RechargeBean projectBean = (RechargeBean) objList.get(j); // list.add(projectBean.getVillageNum()); // list.add(projectBean.getUserName()); // list.add(projectBean.getUserNum()); // list.add(DateUtil.dateToStamp(projectBean.getDate(), DateUtil.type2)); // list.add(projectBean.getMorny()); // list.add(projectBean.getBalance()); list.add(projectBean.getSerial()); list.add(projectBean.getUserName()); list.add(projectBean.getUserId()); list.add(DateUtil.dateToStamp(projectBean.getDate(), DateUtil.type2)); list.add(projectBean.getMorny()); list.add(projectBean.getBalance()); } else { // UserCardBean userCardBean = (UserCardBean) objList.get(j); // list.add(userCardBean.getVillageNum()); // list.add(userCardBean.getUserName()); // list.add(userCardBean.getUserNum()); // list.add(DateUtil.dateToStamp(userCardBean.getDate(), DateUtil.type2)); // list.add(userCardBean.getPhone()); // list.add(userCardBean.getWaterNum()); // list.add(userCardBean.getMushu()); // if (userCardBean.getSt() == 0) { // list.add("空闲"); // } else { // list.add("使用"); // } UserCardBean userCardBean = (UserCardBean) objList.get(j); list.add(userCardBean.getSerial()); list.add(userCardBean.getUserName()); list.add(userCardBean.getUserID()); list.add(DateUtil.dateToStamp(userCardBean.getDate(), DateUtil.type2)); list.add(userCardBean.getPhone()); } for (int i = 0; i < list.size(); i++) { app/src/main/res/layout/activity_new_card.xml
@@ -47,7 +47,8 @@ <LinearLayout style="@style/newCardLL" android:layout_width="match_parent" android:layout_height="wrap_content"> android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" @@ -57,13 +58,21 @@ <EditText android:id="@+id/newCard_name" android:layout_width="match_parent" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="@dimen/new_card_size" /> <ImageView android:id="@+id/newCard_scanBtn" android:layout_width="45dp" android:layout_height="45dp" android:visibility="gone" android:padding="10dp" android:src="@mipmap/icon_scan" /> </LinearLayout> <LinearLayout style="@style/newCardLL" android:layout_width="match_parent" @@ -79,21 +88,29 @@ android:id="@+id/newCard_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberSigned" android:digits="0123456789Xx" android:maxLength="18" android:inputType="numberSigned" android:maxLength="18" android:textSize="@dimen/new_card_size" /> </LinearLayout> <TextView android:id="@+id/newCard_idTip" style="@style/newCardLL" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="扫描后请核对身份信息无误" android:textColor="#FF4500" android:visibility="gone" /> <LinearLayout style="@style/newCardLL" android:visibility="gone" android:layout_width="match_parent" android:layout_height="wrap_content"> android:layout_height="wrap_content" android:visibility="gone"> <TextView android:layout_width="wrap_content" @@ -130,10 +147,7 @@ android:layout_height="wrap_content" android:inputType="number" android:maxLength="11" android:textSize="@dimen/new_card_size" /> </LinearLayout> app/src/main/res/layout/activity_test.xml
New file @@ -0,0 +1,21 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/testBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="测试" /> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" android:scaleType="fitCenter" /> </LinearLayout> app/src/main/res/mipmap-xhdpi/icon_scan.png
app/src/main/res/values/styles.xml
@@ -1,7 +1,7 @@ <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> gradle.properties
@@ -1,21 +1,17 @@ # Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Gradle settings configured through the IDE *will override* # any settings specified in this file. # For more details on how to configure your build environment visit ## For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html # # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # Default value: -Xmx1024m -XX:MaxPermSize=256m # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true # AndroidX package structure to make it clearer which packages are bundled with the # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn #Thu Nov 16 14:03:50 CST 2023 android.enableJetifier=true android.nonTransitiveRClass=true android.useAndroidX=true # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true org.gradle.jvmargs=-Xmx2048m -Dfile.encoding\=UTF-8