commit 0122004f3414338fc5ee7de049fa204b2a7257b5 Author: wangh <123456> Date: Thu Oct 12 15:18:51 2023 +0800 5103 用 长度位置 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2b75303 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..681f41a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,116 @@ + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..15a15b2 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..674414f --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..a5f05cd --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..860da66 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ 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/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..e497da9 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..6edb363 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,38 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 29 + buildToolsVersion "29.0.0" + defaultConfig { + applicationId "com.example.sancode" + minSdkVersion 21 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + ndk { + // 设置支持的SO库架构 + abiFilters 'armeabi' + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' +// implementation files('libs\\pdasdk_v2.25_20190328.jar') + implementation 'org.litepal.android:java:3.0.0' + implementation 'net.sourceforge.jexcelapi:jxl:2.6.12' + implementation files('libs\\uhf_r_v1.0.jar') + +} diff --git a/app/debug/output.json b/app/debug/output.json new file mode 100644 index 0000000..92a0784 --- /dev/null +++ b/app/debug/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-debug.apk","fullName":"debug","baseName":"debug"},"path":"app-debug.apk","properties":{}}] \ No newline at end of file diff --git a/app/debug/扫码写标签.apk b/app/debug/扫码写标签.apk new file mode 100644 index 0000000..8c96e96 Binary files /dev/null and b/app/debug/扫码写标签.apk differ diff --git a/app/libs/uhf_r_v1.0.jar b/app/libs/uhf_r_v1.0.jar new file mode 100644 index 0000000..e69de29 diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/release/app-release.apk b/app/release/app-release.apk new file mode 100644 index 0000000..7fa1f82 Binary files /dev/null and b/app/release/app-release.apk differ diff --git a/app/release/output.json b/app/release/output.json new file mode 100644 index 0000000..c429e31 --- /dev/null +++ b/app/release/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/sancode/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/sancode/ExampleInstrumentedTest.java new file mode 100644 index 0000000..fbfab9e --- /dev/null +++ b/app/src/androidTest/java/com/example/sancode/ExampleInstrumentedTest.java @@ -0,0 +1,27 @@ +package com.example.sancode; + +import android.content.Context; + +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.example.sancode", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4a5bd76 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/litepal.xml b/app/src/main/assets/litepal.xml new file mode 100644 index 0000000..6ee49f7 --- /dev/null +++ b/app/src/main/assets/litepal.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/sancode/ASCIIUtil.java b/app/src/main/java/com/example/sancode/ASCIIUtil.java new file mode 100644 index 0000000..52ec1ea --- /dev/null +++ b/app/src/main/java/com/example/sancode/ASCIIUtil.java @@ -0,0 +1,36 @@ +package com.example.sancode; + +/** + * @author: wangh + * @description: Ass + * @date: 2019/06/20-15:18 + */ +public class ASCIIUtil { + + // String明文转ASCII码hex字符串,一个明文字符生成两个字符表示的16进制ASCII码 + public static String str2Hex(String str) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + // 这里的第二个参数16表示十六进制 + sb.append(Integer.toString(c, 16)); + // 或用toHexString方法直接转成16进制 + // sb.append(Integer.toHexString(c)); + } + return sb.toString(); + } + + // ASCII码hex字符串转String明文 + public static String hex2Str(String hex) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < hex.length() - 1; i += 2) { + String h = hex.substring(i, (i + 2)); + int decimal = Integer.parseInt(h, 16); + sb.append((char) decimal); + } + return sb.toString(); + + } + + +} diff --git a/app/src/main/java/com/example/sancode/BaseActivity.java b/app/src/main/java/com/example/sancode/BaseActivity.java new file mode 100644 index 0000000..279efb7 --- /dev/null +++ b/app/src/main/java/com/example/sancode/BaseActivity.java @@ -0,0 +1,115 @@ +package com.example.sancode; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.util.Log; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.BRMicro.Tools; +import com.handheld.uhfr.UHFRManager; +import com.uhf.api.cls.Reader; + +import java.io.UnsupportedEncodingException; +import java.util.List; + +/** + * Created by wangh on 2020/11/3-9:48。 + */ +public abstract class BaseActivity extends AppCompatActivity { + //c5106 + public UHFRManager mUhfrManager;//uhf + public MediaPlayer music; + public byte[] accessBytes = Tools.HexString2Bytes("00000000") ; + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + music=MediaPlayer.create(this, R.raw.msg); + + } + public void san_epc() { + byte[] readBytes = new byte[16]; + Reader.READER_ERR reader_err = mUhfrManager.getTagData(1,2,8,readBytes,accessBytes,(short)1000) ; + + Log.e("TAG", "san_epc:" + reader_err); + if (reader_err.toString().equals("MT_OK_ERR")){ + music.start(); + Log.e("TAG", "san_epc:" + Tools.Bytes2HexString(readBytes, readBytes.length)) ; +// san_epc_( Tools.Bytes2HexString(readBytes, readBytes.length)); + san_epc_(readBytes); + } + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (myReceiver!=null){ + unregisterReceiver(myReceiver); + } + if (mUhfrManager != null) {//close uhf module + mUhfrManager.close(); + mUhfrManager = null; + } + } + private BroadcastReceiver myReceiver= new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + byte[] data = intent.getByteArrayExtra("data"); + try { + String san_text_info = new String(data, "utf-8"); + onReceiverCall(san_text_info); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + }; + @Override + protected void onResume() { + super.onResume(); + IntentFilter filter = new IntentFilter(); + filter.addAction("com.rfid.SCAN"); + registerReceiver(myReceiver, filter); + mUhfrManager=UHFRManager.getIntance(); + + } + //扫描条码 + public abstract void onReceiverCall(String text); + public abstract void san_epc_(byte[] text); +// @Override +// protected void onResume() { +// super.onResume(); +// scanReader.open(); +// +// tag6C = new Tag6C(CLReader);//6c标签 +// uhfConifg = new UHFConifg(CLReader); +// //打开电源 +// uhfConifg.OpenConnect(false, MainActivity.this); +// if (uhfConifg.GetANTPowerParam() != 24) { +// if (uhfConifg.SetANTPowerParam(2, 24) == 0) { +// Log.e("test","设置天线功率成功"+UHFReader._Config.GetANTPowerParam()); +// } else { +// uhfConifg.Stop(); +// uhfConifg.SetANTPowerParam(2, 24); +// } +// } +// } +} +// +// @Override +// public void OutPutEPC(EPCModel epcModel) { +// uhfConifg.Stop();//停止 +// String epc =epcModel._EPC.trim(); +// tid=epcModel._TID; +// Message msg =Message.obtain(); +// msg.obj =epc; +// msg.what=1; //标志消息的标志 +// myHandler.sendMessage(msg); +// } \ No newline at end of file diff --git a/app/src/main/java/com/example/sancode/C5103Activity.java b/app/src/main/java/com/example/sancode/C5103Activity.java new file mode 100644 index 0000000..a767624 --- /dev/null +++ b/app/src/main/java/com/example/sancode/C5103Activity.java @@ -0,0 +1,156 @@ +package com.example.sancode; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.SharedPreferences; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.util.MonthDisplayHelper; +import android.view.KeyEvent; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.BRMicro.Tools; +import com.handheld.uhfr.UHFRManager; +import com.uhf.api.cls.Reader; + +import java.util.Date; + +public class C5103Activity extends AppCompatActivity implements View.OnClickListener, TextWatcher { + TextView ASCIIText; + TextView EPCText; + EditText writheText; + TextView writheAsciiText; + EditText read_lenth; + Button writhe, clan, san,setting; + private MediaPlayer music; + public UHFRManager mUhfrManager;//uhf + public byte[] accessBytes = Tools.HexString2Bytes("00000000") ; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_c5103); + init_view(); + music=MediaPlayer.create(this, R.raw.msg); + + } + + private void init_view() { + ASCIIText=findViewById(R.id.ASCII_text); + EPCText=findViewById(R.id.EPC_text); + writheText=findViewById(R.id.writhe_text); + writheText.addTextChangedListener(this); + writheAsciiText=findViewById(R.id.writhe_ascii_text); + read_lenth=findViewById(R.id.rind_lenth); + read_lenth.setText(SharedPreferencesUtils.getstring("reed_length","7")); + writhe=findViewById(R.id.writhe); + clan=findViewById( R.id.clan); + san=findViewById( R.id.san); + setting=findViewById(R.id.setting); + writhe.setOnClickListener(this); + clan.setOnClickListener(this); + san.setOnClickListener(this); + setting.setOnClickListener(this); + + } + + + + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.writhe: + //输入框 + String writhe_code=writheText.getText().toString(); + if (writhe_code.isEmpty()) + return; + //转ASCII + String code=ASCIIUtil.str2Hex(writhe_code); + int lenth=code.length()*2; + String conntor=Integer.toHexString(lenth); + Log.e("TAG", lenth+"onClick:" + conntor); + + byte[] write= Tools.HexString2Bytes(conntor+"00"+code); + char i=1; + Reader.READER_ERR reader_err = mUhfrManager. writeTagData(i,1, + write, write.length, accessBytes, (short)1000); + Log.e("TAG", "write:" + reader_err); + if (reader_err.toString().equals("MT_OK_ERR")){ + Toast.makeText(this, "写入成功"+code, Toast.LENGTH_SHORT).show(); + ASCIIText.setText(null); + EPCText.setText(null); + writheText.setText(null); + writheAsciiText.setText(null); + }else { + Toast.makeText(this, "写入失败", Toast.LENGTH_SHORT).show(); + } + break; + case R.id.clan: + ASCIIText.setText(null); + EPCText.setText(null); + writheText.setText(null); + writheAsciiText.setText(null); + break; + case R.id.san: + int lenth_text= Integer.parseInt(read_lenth.getText().toString()); + byte[] readBytes = new byte[lenth_text*2]; + Reader.READER_ERR reader_err1 = mUhfrManager + .getTagData(1,2,lenth_text,readBytes,accessBytes,(short)1000) ; + Log.e("TAG", "san_epc:" + reader_err1); + if (reader_err1.toString().equals("MT_OK_ERR")) { + music.start(); + String epc=Tools.Bytes2HexString(readBytes, readBytes.length); + ASCIIText.setText(epc); + EPCText.setText(ASCIIUtil.hex2Str(epc)); + } + break; + case R.id.setting: + String trim = read_lenth.getText().toString().trim(); + if (trim.isEmpty()) return; + SharedPreferencesUtils.putstring("reed_length",trim); + Toast.makeText(this, "本次应用成功", Toast.LENGTH_SHORT).show(); + break; + } + } + +// @Override +// public boolean onKeyDown(int keyCode, KeyEvent event) { +// Toast.makeText(this, ""+keyCode, Toast.LENGTH_SHORT).show(); +// return true; +// } + + @Override + protected void onResume() { + super.onResume(); + mUhfrManager=UHFRManager.getIntance(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mUhfrManager!=null){ + mUhfrManager.close(); + } + } + + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + writheAsciiText.setText(ASCIIUtil.str2Hex(editable.toString())); + } +} diff --git a/app/src/main/java/com/example/sancode/MainActivity.java b/app/src/main/java/com/example/sancode/MainActivity.java new file mode 100644 index 0000000..1375ca1 --- /dev/null +++ b/app/src/main/java/com/example/sancode/MainActivity.java @@ -0,0 +1,279 @@ +package com.example.sancode; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; + +import android.content.DialogInterface; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +//import com.pda.rfid.EPCModel; +//import com.pda.rfid.IAsynchronousMessage; +//import com.pda.rfid.uhf.Tag6C; +//import com.pda.rfid.uhf.UHF; +//import com.pda.rfid.uhf.UHFConifg; +//import com.pda.rfid.uhf.UHFReader; +//import com.pda.scanner.ScanReader; +//import com.pda.scanner.Scanner; + +import com.BRMicro.Tools; +import com.uhf.api.cls.Reader; + +import org.litepal.LitePal; + +import java.io.File; +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.nio.charset.Charset; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import jxl.Workbook; +import jxl.write.Label; +import jxl.write.WritableSheet; +import jxl.write.WritableWorkbook; +import jxl.write.WriteException; + +public class MainActivity extends BaseActivity implements View.OnClickListener +{ + TextView text2; + EditText text1; + + Button button,bu1,but2,but12; + + + private long exitTime = 0; + private byte[] tid=null; + private AlertDialog.Builder dialog; + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + init(); + dialog = new AlertDialog.Builder(MainActivity.this); + } + @Override + public void onClick(View view) { + switch (view.getId()){ + case R.id.but: + String barCode=text1.getText().toString(); +// if (barCode.equals("")||tid==null){ +// Toast.makeText(this, "还未扫描标签&条码", Toast.LENGTH_SHORT).show(); +// }else { + String epc=text2.getText().toString(); + code_rule(barCode); +// } + + break; + + case R.id.but2: + san_epc(); + break; + case R.id.but1: + text1.setText(""); + text2.setText(""); + break; + + + + } + + + } + //规则 + private void code_rule(String barCode){ + barCode.trim(); +// int codelenth=barCode.length(); +// if (codelenth>12){ +// Log.e("test","大于12"); +// barCode=barCode.substring(0,12); +// }else if (codelenth<12){ +// int needLenth=12-codelenth; +// for (int i=0;i 2000) { + Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); + exitTime = System.currentTimeMillis(); + return true; + } else { + finish(); + } + } + return false; + } + + + + + //初始化ui + private void init(){ + text1=findViewById(R.id.textView2); + text2=findViewById(R.id.text1); + button=findViewById(R.id.but); + but2=findViewById(R.id.but2); + but2.setOnClickListener(this); + bu1=findViewById(R.id.but1); + bu1.setOnClickListener(this); + + button.setOnClickListener(this); + + } + + + //扫描条码 + @Override + public void onReceiverCall(String text) { + text1.setText(text); + } + + @Override + public void san_epc_(byte[] text) { + tid=text; + text2.setText(ASCIIUtil.hex2Str(Tools.Bytes2HexString(tid, tid.length))); + } + + //导出数据到excel表 + private void craetExcel() { + try { + File file=new File("/storage/emulated/0/RfidFile"); + if (!file.exists()){ + file.mkdirs(); + } + File file1=new File(file,"RFIDRecrd.xls"); + if (!file1.exists()){ + file1.createNewFile(); + } + WritableWorkbook book = Workbook.createWorkbook(file1); + // 参数0表示这是第一页 + WritableSheet sheet_wirthe = book.createSheet("EPC写入记录", 0); + sheet_wirthe.setColumnView(0,5); + sheet_wirthe.setColumnView(1,35); + sheet_wirthe.setColumnView(2,35); + sheet_wirthe.setColumnView(3,35); + // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0) + Label epc_writhe1 = new Label(0, 0, "id"); + + sheet_wirthe.addCell(epc_writhe1); + Label barcode = new Label(1, 0, "BarCode"); + sheet_wirthe.addCell(barcode); + Label epc_writhe = new Label(2, 0, "EPC"); + sheet_wirthe.addCell(epc_writhe); + Label tid_writhe = new Label(3, 0, "时间"); + sheet_wirthe.addCell(tid_writhe); + // 以及单元格内容为baby + List rfids= LitePal.findAll(RFID.class); + Log.e("TAG", "craetExcel:" + rfids.toString()); + if (rfids.size()!=0) { + for (int i = 0; i < rfids.size(); i++) { + RFID rfid = rfids.get(i); + Label id_writhe_1 = new Label(0, i+1, rfid.getId()+""); + sheet_wirthe.addCell(id_writhe_1); + + Label bar_writhe_1 = new Label(1, i+1, rfid.getBarcode()); + sheet_wirthe.addCell(bar_writhe_1); + Label epc_writhe_1 = new Label(2, i+1, rfid.getEpc()); + sheet_wirthe.addCell(epc_writhe_1); + Label tid_writhe_1 = new Label(3, i+1, rfid.getTime()); + sheet_wirthe.addCell(tid_writhe_1); + } + } + //写入数据并关闭 + book.write(); + book.close(); + Toast.makeText(this, "导出成功", Toast.LENGTH_SHORT).show(); + } catch (Exception e) { + e.printStackTrace(); + Toast.makeText(this, "导出失败", Toast.LENGTH_SHORT).show(); + return; + } + + } + + @Override + public boolean onCreatePanelMenu(int featureId, Menu menu) { + MenuInflater menuInflater=new MenuInflater(this); + menuInflater.inflate(R.menu.mymenu,menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()){ + case R.id.qingkong: + text1.setText(""); + text2.setText(""); + tid=null; + break; + + case R.id.daochu: + craetExcel(); + break; + case R.id.qingkongsql: + dialog.setMessage("确定要删除所有数据库记录!") + .setTitle("提示") + .setCancelable(false) + .setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + LitePal.deleteAll(RFID.class); + } + }).setNegativeButton("取消",null); + dialog.show(); + break; + + } + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/com/example/sancode/MyApplication.java b/app/src/main/java/com/example/sancode/MyApplication.java new file mode 100644 index 0000000..291883c --- /dev/null +++ b/app/src/main/java/com/example/sancode/MyApplication.java @@ -0,0 +1,20 @@ +package com.example.sancode; + +import android.app.Application; + +import org.litepal.LitePal; + +/** + * @author: wangh + * @description: + * @date: 2019/06/19-11:24 + */ +public class MyApplication extends Application { + + @Override + public void onCreate() { + super.onCreate(); + LitePal.initialize(this); + + } +} diff --git a/app/src/main/java/com/example/sancode/RFID.java b/app/src/main/java/com/example/sancode/RFID.java new file mode 100644 index 0000000..9b044ec --- /dev/null +++ b/app/src/main/java/com/example/sancode/RFID.java @@ -0,0 +1,58 @@ +package com.example.sancode; + +import org.litepal.crud.LitePalSupport; + +/** + * @author: wangh + * @description: + * @date: 2019/09/10-16:51 + */ +public class RFID extends LitePalSupport { + private int id; + private String barcode; + private String epc; + private String time; + + public String getBarcode() { + return barcode; + } + + public void setBarcode(String barcode) { + this.barcode = barcode; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getEpc() { + return epc; + } + + public void setEpc(String epc) { + this.epc = epc; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + + @Override + public String toString() { + return "RFID{" + + "id=" + id + + ", barcode='" + barcode + '\'' + + ", epc='" + epc + '\'' + + ", time='" + time + '\'' + + '}'; + } +} diff --git a/app/src/main/java/com/example/sancode/SharedPreferencesUtils.java b/app/src/main/java/com/example/sancode/SharedPreferencesUtils.java new file mode 100644 index 0000000..7bf456c --- /dev/null +++ b/app/src/main/java/com/example/sancode/SharedPreferencesUtils.java @@ -0,0 +1,86 @@ +package com.example.sancode; + +import android.content.Context; +import android.content.SharedPreferences; + +/** + * Created by wang 18/7/5 + */ + +public class SharedPreferencesUtils { + private static SharedPreferences sharedPreferences; + private static SharedPreferences.Editor edit; + + public static void init(Context context, String name) { + sharedPreferences = context.getSharedPreferences(name, context.MODE_PRIVATE); + edit = sharedPreferences.edit(); + edit.commit(); + } + + public static void putstring(String key, String value) { + if (edit != null) { + edit.putString(key, value); + edit.commit(); + } + } + public static void putInt(String key, int value) { + if (edit != null) { + edit.putInt(key, value); + edit.commit(); + } + } + + public static int getInt(String key, int value) { + if (sharedPreferences != null) { + return sharedPreferences.getInt(key,value); + } + return 0; + } + + + public static void putboolean(String key, boolean value) { + if (edit != null) { + edit.putBoolean(key, value); + edit.commit(); + } + } + + /** + * 取得方法 + */ + + public static String getstring(String key, String deaflut) { + if (sharedPreferences != null) { + return sharedPreferences.getString(key, deaflut); + } + return ""; + } + + public static boolean getboolean(String key, boolean aaa) { + if (sharedPreferences != null) { + boolean aBoolean = sharedPreferences.getBoolean(key, aaa); + return aBoolean; + } + return false; + } + + /** + * remo + */ + public static void removeKey(String key) { + if (edit != null) { + edit.remove(key); + edit.commit(); + } + } + public static void Clean() { + //清空数据 + try { + edit.clear(); + edit.commit(); + }catch (Exception e){ + e.printStackTrace(); + } + + } +} diff --git a/app/src/main/jniLibs/arm64-v8a/libModuleAPIJni.so b/app/src/main/jniLibs/arm64-v8a/libModuleAPIJni.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/arm64-v8a/libdevapi.so b/app/src/main/jniLibs/arm64-v8a/libdevapi.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/arm64-v8a/libirdaSerialPort.so b/app/src/main/jniLibs/arm64-v8a/libirdaSerialPort.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/armeabi-v7a/libModuleAPIJni.so b/app/src/main/jniLibs/armeabi-v7a/libModuleAPIJni.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/armeabi-v7a/libdevapi.so b/app/src/main/jniLibs/armeabi-v7a/libdevapi.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/armeabi-v7a/libirdaSerialPort.so b/app/src/main/jniLibs/armeabi-v7a/libirdaSerialPort.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/armeabi/libModuleAPIJni.so b/app/src/main/jniLibs/armeabi/libModuleAPIJni.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/armeabi/libModuleAPI_Android.so b/app/src/main/jniLibs/armeabi/libModuleAPI_Android.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/armeabi/libSerialPort.so b/app/src/main/jniLibs/armeabi/libSerialPort.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/armeabi/libdevapi.so b/app/src/main/jniLibs/armeabi/libdevapi.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/jniLibs/armeabi/libirdaSerialPort.so b/app/src/main/jniLibs/armeabi/libirdaSerialPort.so new file mode 100644 index 0000000..e69de29 diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/rectangle_box.xml b/app/src/main/res/drawable/rectangle_box.xml new file mode 100644 index 0000000..48402f4 --- /dev/null +++ b/app/src/main/res/drawable/rectangle_box.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_c5103.xml b/app/src/main/res/layout/activity_c5103.xml new file mode 100644 index 0000000..1b37c62 --- /dev/null +++ b/app/src/main/res/layout/activity_c5103.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + +