安卓Android Studioy读写NXP ICODE2 15693标签源码

 本示例使用的发卡器:https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-21818769070.11.4391789eCLwm3t&id=615391857885

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="3dp"tools:context=".ISO15693Activity"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="30dp"android:background="?attr/colorPrimary"app:navigationIcon="@drawable/baseline_arrow_back_ios_24"app:titleTextColor="@color/white"tools:ignore="MissingConstraints"tools:layout_editor_absoluteY="0dp"><TextViewandroid:id="@+id/TextViewlabelDispleft"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="返回"android:textColor="@color/white"android:textSize="16sp"android:gravity="center"android:onClick="retmain" /><TextViewandroid:id="@+id/TextViewlabelDisp"android:layout_width="match_parent"android:layout_height="match_parent"android:text="15693卡、hid-iclass卡物理卡号测试页"android:textColor="@color/white"android:gravity="center_horizontal|bottom"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/TextViewlabelDispleft"app:layout_constraintTop_toTopOf="parent" /></androidx.appcompat.widget.Toolbar><TextViewandroid:id="@+id/sample_text"android:layout_width="fill_parent"android:layout_height="150dp"android:padding="3dp"android:text="操作结果"android:textSize="12sp"android:background="@drawable/shape4border"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintBottom_toBottomOf="parent"/><ScrollViewandroid:id="@+id/scrollViewIC"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_marginBottom="5dp"android:scrollbars="horizontal"app:layout_constraintBottom_toTopOf="@+id/sample_text"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/toolbar"><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="3dp"><TextViewandroid:id="@+id/labeltextseletag"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="选择15693标签类型:"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent" /><Spinnerandroid:id="@+id/sp_seletagtype"android:layout_width="290dp"android:layout_height="20dp"android:entries="@array/Tagtype15693"android:theme="@style/my_spinner_style"app:layout_constraintBottom_toBottomOf="@+id/labeltextseletag"app:layout_constraintLeft_toRightOf="@+id/labeltextseletag"app:layout_constraintTop_toTopOf="@+id/labeltextseletag" /><Buttonandroid:id="@+id/butt_EasyRead15693Card"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:onClick="easyread15693"android:text="轻松读15693卡"android:textSize="11sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/labeltextseletag" /><Buttonandroid:id="@+id/butt_EasyWrite15693Card"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="easywrite15693"android:text="轻松写15693卡"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/butt_EasyRead15693Card"app:layout_constraintLeft_toRightOf="@+id/butt_EasyRead15693Card"app:layout_constraintTop_toTopOf="@+id/butt_EasyRead15693Card" /><TextViewandroid:id="@+id/labeltextUID"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="2dp"android:layout_marginTop="6dp"android:text="UID:"android:textSize="12sp"app:layout_constraintLeft_toRightOf="@+id/butt_EasyWrite15693Card"app:layout_constraintTop_toTopOf="@+id/butt_EasyWrite15693Card" /><TextViewandroid:id="@+id/labeltextnote4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="2dp"android:layout_marginTop="16dp"android:layout_marginBottom="6dp"android:textColor="#FF0000"android:text="读写时感应区内只能有一张卡!"android:textSize="10sp"app:layout_constraintBottom_toBottomOf="@+id/butt_EasyWrite15693Card"app:layout_constraintLeft_toRightOf="@+id/butt_EasyWrite15693Card"app:layout_constraintTop_toBottomOf="@+id/labeltextUID" /><TextViewandroid:id="@+id/textDispUID"android:layout_width="110dp"android:layout_height="wrap_content"android:layout_marginLeft="2dp"android:background="@drawable/shape4border"android:gravity="center"android:textColor="#FF0000"android:text="                "android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/labeltextUID"app:layout_constraintLeft_toRightOf="@+id/labeltextUID"app:layout_constraintTop_toTopOf="@+id/labeltextUID" /><TextViewandroid:id="@+id/labeltextnote1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="卡片应用标识AFI:"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/butt_EasyRead15693Card" /><EditTextandroid:id="@+id/textafi"android:layout_width="30dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@drawable/shape4border"android:gravity="center"android:text="00"android:textColor="#FF0000"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/labeltextnote1"app:layout_constraintLeft_toRightOf="@+id/labeltextnote1"app:layout_constraintTop_toTopOf="@+id/labeltextnote1" /><TextViewandroid:id="@+id/labeltextnote2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="18dp"android:text="本次读写起始块:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/textafi"app:layout_constraintLeft_toRightOf="@+id/textafi"app:layout_constraintTop_toTopOf="@+id/textafi" /><EditTextandroid:id="@+id/textRWbegin"android:layout_width="30dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@drawable/shape4border"android:gravity="center"android:text="0"android:textColor="#FF0000"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/labeltextnote2"app:layout_constraintLeft_toRightOf="@+id/labeltextnote2"app:layout_constraintTop_toTopOf="@+id/labeltextnote2" /><TextViewandroid:id="@+id/labeltextnote3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="18dp"android:text="读写块数:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/textRWbegin"app:layout_constraintLeft_toRightOf="@+id/textRWbegin"app:layout_constraintTop_toTopOf="@+id/textRWbegin" /><EditTextandroid:id="@+id/textRWblocks"android:layout_width="30dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@drawable/shape4border"android:gravity="center"android:text="12"android:textColor="#FF0000"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/labeltextnote3"app:layout_constraintLeft_toRightOf="@+id/labeltextnote3"app:layout_constraintTop_toTopOf="@+id/labeltextnote3" /><EditTextandroid:id="@+id/editrwdata"android:layout_width="match_parent"android:layout_height="80dp"android:layout_marginTop="5dp"android:background="@drawable/shape4border"android:digits="0123456789ABCDEFabcdef "android:inputType="textCapCharacters"android:maxLines="8"android:gravity="left"android:text="                                               "android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/labeltextnote1" /><Buttonandroid:id="@+id/butt_Request15693Card"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:text="搜索感应区内多张15693卡"android:textSize="11sp"android:onClick="Request15693card"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/editrwdata" /><TextViewandroid:id="@+id/labeltextflag"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:text="操作标识:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/butt_Request15693Card"app:layout_constraintLeft_toRightOf="@+id/butt_Request15693Card"app:layout_constraintTop_toTopOf="@+id/butt_Request15693Card" /><EditTextandroid:id="@+id/edittextflag"android:layout_width="30dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@drawable/shape4border"android:gravity="center"android:text="00"android:textColor="#FF0000"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/labeltextflag"app:layout_constraintLeft_toRightOf="@+id/labeltextflag"app:layout_constraintTop_toTopOf="@+id/labeltextflag" /><TextViewandroid:id="@+id/labeltextmac"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="25dp"android:text="掩码长度:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/edittextflag"app:layout_constraintLeft_toRightOf="@+id/edittextflag"app:layout_constraintTop_toTopOf="@+id/edittextflag" /><EditTextandroid:id="@+id/edittextmac"android:layout_width="30dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@drawable/shape4border"android:gravity="center"android:text="0"android:textColor="#FF0000"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/labeltextmac"app:layout_constraintLeft_toRightOf="@+id/labeltextmac"app:layout_constraintTop_toTopOf="@+id/labeltextmac" /><TextViewandroid:id="@+id/labeltextnote5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="请选择已搜索到的卡片UID:"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/butt_Request15693Card" /><Spinnerandroid:id="@+id/sp_seleuid"android:layout_width="240dp"android:layout_height="20dp"app:layout_constraintBottom_toBottomOf="@+id/labeltextnote5"app:layout_constraintLeft_toRightOf="@+id/labeltextnote5"app:layout_constraintTop_toTopOf="@+id/labeltextnote5" /><TextViewandroid:id="@+id/labeltextnote6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="请输入本次读写起始块地址:"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/labeltextnote5" /><EditTextandroid:id="@+id/edittextblockbegin"android:layout_width="40dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@drawable/shape4border"android:gravity="center"android:text="0"android:textColor="#FF0000"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/labeltextnote6"app:layout_constraintLeft_toRightOf="@+id/labeltextnote6"app:layout_constraintTop_toTopOf="@+id/labeltextnote6" /><TextViewandroid:id="@+id/labeltextblocks"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:text="本次读写块数:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/edittextblockbegin"app:layout_constraintLeft_toRightOf="@+id/edittextblockbegin"app:layout_constraintTop_toTopOf="@+id/edittextblockbegin" /><EditTextandroid:id="@+id/textreadwriteblocks"android:layout_width="40dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@drawable/shape4border"android:gravity="center"android:text="28"android:textColor="#FF0000"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/labeltextblocks"app:layout_constraintLeft_toRightOf="@+id/labeltextblocks"app:layout_constraintTop_toTopOf="@+id/labeltextblocks" /><Buttonandroid:id="@+id/butt_read15693block"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="读取指定UID卡数据"android:textSize="11sp"android:onClick="read15693block"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/labeltextnote6" /><Buttonandroid:id="@+id/butt_write15693block"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="写数据到指定UID卡"android:textSize="11sp"android:onClick="write15693block"app:layout_constraintBottom_toBottomOf="@+id/butt_read15693block"app:layout_constraintLeft_toRightOf="@+id/butt_read15693block"app:layout_constraintTop_toTopOf="@+id/butt_read15693block" /><EditTextandroid:id="@+id/editrwblockdata"android:layout_width="match_parent"android:layout_height="80dp"android:layout_marginTop="5dp"android:background="@drawable/shape4border"android:digits="0123456789ABCDEFabcdef "android:inputType="textCapCharacters"android:maxLines="8"android:gravity="left"android:text="                                               "android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/butt_read15693block" /><Buttonandroid:id="@+id/butt_write15693uid"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="15dp"android:onClick="write15693uid"android:text="将UID写入SLIX1830卡内"android:textSize="11sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/editrwblockdata" /><TextViewandroid:id="@+id/labeltextnewuid"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:text="新UID:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/butt_write15693uid"app:layout_constraintLeft_toRightOf="@+id/butt_write15693uid"app:layout_constraintTop_toTopOf="@+id/butt_write15693uid" /><EditTextandroid:id="@+id/edittextnewuid"android:layout_width="130dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:background="@drawable/shape4border"android:digits="0123456789ABCDEFabcdef"android:gravity="center"android:text="               "android:textColor="#FF0000"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/labeltextnewuid"app:layout_constraintLeft_toRightOf="@+id/labeltextnewuid"app:layout_constraintTop_toTopOf="@+id/labeltextnewuid" /></androidx.constraintlayout.widget.ConstraintLayout></ScrollView></androidx.constraintlayout.widget.ConstraintLayout>

 

package com.usbreadertest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;import android.widget.ArrayAdapter;import com.reader.ourmifare;public class ISO15693Activity extends AppCompatActivity {private TextView tv;private Spinner spinner;private ArrayAdapter<String> adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_iso15693);androidx.appcompat.widget.Toolbar toolbar=findViewById(R.id.toolbar);setSupportActionBar(toolbar);tv = findViewById(R.id.sample_text);tv.setText("操作结果");}@Overridepublic void onBackPressed(){super.onBackPressed();finish();}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if(item.getItemId()==android.R.id.home){finish();return true;}return super.onOptionsItemSelected(item);}public void retmain(View view){finish();}public void easyread15693(View view){byte status;                      //存放返回值byte myctrlword = 0;              //读写控制字,一般取0 就行了byte afi ;                        //卡片应用标识byte startblock ;                 //指定读起始块地址,最大取值255(根据卡类型)byte blocknum ;                   //指定读取块数,最大取值12byte[] myuid = new byte[8];       //8字节卡序列号缓冲byte[] mydatabuf = new byte[255]; //读卡数据缓冲共255个字节tv.setText(" ");TextView ctruid=findViewById(R.id.textDispUID);ctruid.setText("");EditText ctrrwdata=findViewById(R.id.editrwdata);ctrrwdata.setText("");EditText ctrafi=findViewById(R.id.textafi) ;String afistr=ctrafi.getText().toString().trim();if (afistr.length() < 2){tv.setText("应用标识AFI是2位16进制数据,请输入正确的AFI!");return;}else {afi=(byte) Integer.parseInt(afistr, 16);  }EditText ctrbeginadd = findViewById(R.id.textRWbegin);  //操作起始地址startblock=(byte)Integer.parseInt(ctrbeginadd.getText().toString().trim());EditText ctrrwblocks = findViewById(R.id.textRWblocks);  //读写块数blocknum=(byte)Integer.parseInt(ctrrwblocks.getText().toString().trim());Spinner spls = findViewById(R.id.sp_seletagtype);int tagtype =(int)(spls.getSelectedItemId());   //标签类型if (tagtype==0) {if (blocknum < 1 || blocknum > 12) {tv.setText("一次最多读写12块数据,如要读写更多的数据请使用循环的方式读写。");return;}}else{if (blocknum != 1) {tv.setText("富士通标签每次只能读写一块数据!");return;}}status = ourmifare.iso15693readex(myctrlword, afi, startblock, blocknum, myuid, mydatabuf) ;if (status == 0) {ourmifare.pcdbeep(38);String serialnumber = "";for (int i = 0; i < 8; i++) {String bytestr = "00" + Integer.toHexString(myuid[i] & 0xFF);serialnumber = serialnumber + bytestr.substring(bytestr.length() - 2, bytestr.length());}ctruid.setText(serialnumber);EditText ctrnewuid=findViewById(R.id.edittextnewuid);ctrnewuid.setText(serialnumber);String databuf = "";for (int i = 1; i < mydatabuf[0]+1; i++) {String bytestr = "00" + Integer.toHexString(mydatabuf[i] & 0xFF);databuf = databuf + bytestr.substring(bytestr.length() - 2, bytestr.length())+" ";}ctrrwdata.setText(databuf);tv.setText("读取15693标签数据操作成功!");} else {PrintErrInf(status);   //错误代码提示}}public void easywrite15693(View view){byte status;                      //存放返回值byte myctrlword = 0;              //读写控制字,一般取0 就行了byte afi ;                        //卡片应用标识byte startblock ;                 //指定读起始块地址,最大取值255(根据卡类型)byte blocknum ;                   //指定读取块数,最大取值12byte[] myuid = new byte[8];       //8字节卡序列号缓冲byte[] mydatabuf = new byte[255]; //读卡数据缓冲共255个字节byte DataLen;tv.setText(" ");TextView ctruid=findViewById(R.id.textDispUID);ctruid.setText("");EditText ctrafi=findViewById(R.id.textafi) ;String afistr=ctrafi.getText().toString().trim();if (afistr.length() < 2){tv.setText("应用标识AFI是2位16进制数据,请输入正确的AFI!");return;}else {afi=(byte) Integer.parseInt(afistr, 16);  }EditText ctrbeginadd = findViewById(R.id.textRWbegin);  //操作起始地址startblock=(byte)Integer.parseInt(ctrbeginadd.getText().toString().trim());EditText ctrrwblocks = findViewById(R.id.textRWblocks);  //读写块数blocknum=(byte)Integer.parseInt(ctrrwblocks.getText().toString().trim());Spinner spls = findViewById(R.id.sp_seletagtype);int tagtype =(int)(spls.getSelectedItemId());   //标签类型if (tagtype==0) {if (blocknum < 1 || blocknum > 12) {tv.setText("一次最多读写12块数据,如要读写更多的数据请使用循环的方式读写。");return;}DataLen=(byte)(blocknum*4);}else {if (blocknum != 1) {tv.setText("富士通标签每次只能读写一块数据!");return;}if (tagtype==1){DataLen=(byte)(blocknum*8);     //} else{DataLen=(byte)(blocknum*32);}}EditText ctrrwdata=findViewById(R.id.editrwdata);String rwdatahex=ctrrwdata.getText().toString().trim();String[] strArr = rwdatahex.split("\\ ");    /*分割接收到的数据后再分析、处理、返回指令 */if (strArr.length<DataLen){tv.setText("写入数据不足,请输入"+Integer.toString(DataLen*2)+"位16进制写入数据!");return;}else{mydatabuf[0]=DataLen;for(int p=0;p<strArr.length;p++) {mydatabuf[p+1]=(byte)(Integer.parseInt(strArr[p],16));}}status = ourmifare.iso15693writeex(myctrlword, afi, startblock, blocknum, myuid, mydatabuf) ;if (status == 0) {ourmifare.pcdbeep(38);String serialnumber = "";for (int i = 0; i < 8; i++) {String bytestr = "00" + Integer.toHexString(myuid[i] & 0xFF);serialnumber = serialnumber + bytestr.substring(bytestr.length() - 2, bytestr.length());}ctruid.setText(serialnumber);EditText ctrnewuid=findViewById(R.id.edittextnewuid);ctrnewuid.setText(serialnumber);tv.setText("写15693标签数据操作成功!");} else {PrintErrInf(status);   //错误代码提示}}public void Request15693card(View view){byte status;                            //存放返回值byte[] maskuidbuf = new byte[8];       //卡号掩码,一般可以不理这个参数byte[] myuid = new byte[81];           //卡数据缓冲byte[] revlen= new byte[1];tv.setText(" ");Spinner ctrspuid=findViewById(R.id.sp_seleuid);List<String> options = new ArrayList<>();options.clear();adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,options);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);ctrspuid.setAdapter(adapter);EditText ctrtextafi=findViewById(R.id.textafi);ctrtextafi.setText("00");byte afi = 0;                          //卡片应用标识EditText ctrtextflage=findViewById(R.id.edittextflag);ctrtextflage.setText("16");byte flags = (byte) 0x16;              //操作卡片的标识字,详细说明参看文档EditText ctrtextmasklen=findViewById(R.id.edittextmac);ctrtextmasklen.setText("0");byte masklen = 0;                     //掩码长度,有一张卡最大为40,一张卡为43,理论上为64status = ourmifare.iso15693inventory16(flags, afi, masklen, maskuidbuf, revlen,myuid);if (status == 0) {ourmifare.pcdbeep(38);int j=0;String dispinf="";String serialnumber = "";while (j<revlen[0]) {String dsfidstr = "00" + Integer.toHexString(myuid[j] & 0xFF);dsfidstr= dsfidstr.substring(dsfidstr.length() - 2, dsfidstr.length());serialnumber = "";for (int i = 1; i < 9; i++) {String bytestr = "00" + Integer.toHexString(myuid[j+i] & 0xFF);serialnumber = serialnumber + bytestr.substring(bytestr.length() - 2, bytestr.length());}dispinf=dispinf+"DSFID:"+dsfidstr+"  UID:" + serialnumber + "\n";j=j+9;options.add(serialnumber);}adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,options);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);ctrspuid.setAdapter(adapter);EditText ctrnewuid=findViewById(R.id.edittextnewuid);ctrnewuid.setText(serialnumber);tv.setText("搜寻15693卡成功!\n\n"+dispinf);} else {PrintErrInf(status);   //错误代码提示}}public void read15693block(View view){String uidstr="";byte status=1;                    //存放返回值byte startblock = 0;              //指定读起始块地址,最大取值255(根据卡类型)byte blocknum = 1;                //指定读取块数,最大取值12byte[] myuid = new byte[8];       //8字节卡序列号缓冲byte[] revlen = new byte[1];      //返回读取数据长度byte[] mydatabuf = new byte[255]; //读卡数据缓冲共255个字节tv.setText(" ");EditText ctrtextrwdata=findViewById(R.id.editrwblockdata);ctrtextrwdata.setText("");Spinner ctrspuid=findViewById(R.id.sp_seleuid);if (ctrspuid.getSelectedItemId()<0){tv.setText("请先搜寻卡片获取需读写卡的UID!");return;}else{uidstr=ctrspuid.getSelectedItem().toString();tv.setText(uidstr);}EditText ctrtextflage=findViewById(R.id.edittextflag);ctrtextflage.setText("22");byte flags = (byte) 0x22;              //操作卡片的标识字,详细说明参看文档EditText ctrbeginadd = findViewById(R.id.edittextblockbegin);  //操作起始地址startblock=(byte)Integer.parseInt(ctrbeginadd.getText().toString().trim());EditText ctrrwblocks = findViewById(R.id.textreadwriteblocks);  //读写块数blocknum=(byte)Integer.parseInt(ctrrwblocks.getText().toString().trim());for(int i=0;i<8;i++) {myuid[i]=(byte)Integer.parseInt(uidstr.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}int j=0;String readdatastr="";while (j<blocknum){status = ourmifare.iso15693readblock( flags, (byte)(startblock+j), (byte)1, myuid,revlen, mydatabuf) ;if (status==0){for (int i=0;i<revlen[0];i++ ){String bytestr = "00" + Integer.toHexString(mydatabuf[i] & 0xFF);readdatastr = readdatastr + bytestr.substring(bytestr.length() - 2, bytestr.length())+" ";}j++;}else{ j=blocknum;}}if (status == 0) {ourmifare.pcdbeep(38);ctrtextrwdata.setText(readdatastr);tv.setText("读取15693标签数据操作成功!");} else {PrintErrInf(status);   //错误代码提示}}public void write15693block(View view){String uidstr="";byte status=1;                    //存放返回值byte startblock = 0;              //指定读起始块地址,最大取值255(根据卡类型)byte blocknum = 1;                //指定读取块数,最大取值12byte[] myuid = new byte[8];       //8字节卡序列号缓冲byte[] revlen = new byte[1];      //返回读取数据长度byte[] mydatabuf = new byte[255]; //读卡数据缓冲共255个字节tv.setText("");Spinner ctrspuid=findViewById(R.id.sp_seleuid);if (ctrspuid.getSelectedItemId()<0){tv.setText("请先搜寻卡片获取需读写卡的UID!");return;}else{uidstr=ctrspuid.getSelectedItem().toString();tv.setText(uidstr);}EditText ctrtextflage=findViewById(R.id.edittextflag);ctrtextflage.setText("22");byte flags = (byte) 0x22;              //操作卡片的标识字,详细说明参看文档EditText ctrbeginadd = findViewById(R.id.edittextblockbegin);  //操作起始地址startblock=(byte)Integer.parseInt(ctrbeginadd.getText().toString().trim());EditText ctrrwblocks = findViewById(R.id.textreadwriteblocks);  //读写块数blocknum=(byte)Integer.parseInt(ctrrwblocks.getText().toString().trim());for(int i=0;i<8;i++) {myuid[i]=(byte)Integer.parseInt(uidstr.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}Spinner spls = findViewById(R.id.sp_seletagtype);int tagtype =(int)(spls.getSelectedItemId());   //标签类型int blockbytes=4;if (tagtype==0) {blockbytes=4;}else {if (tagtype==1){blockbytes=8;     //} else{blockbytes=32;}}EditText ctrrwdata=findViewById(R.id.editrwblockdata);String rwdatahex=ctrrwdata.getText().toString().trim();String[] strArr = rwdatahex.split("\\ ");    /*分割接收到的数据后再分析、处理、返回指令*/if (strArr.length<blocknum*blockbytes) {tv.setText("写入数据不足,请输入" + Integer.toString(blocknum*blockbytes * 2) + "位16进制写入数据!");return;}int j=0;while (j<blocknum) {String disps="";for (int i=0;i<blockbytes;i++){mydatabuf[i]=(byte)(Integer.parseInt(strArr[j*blockbytes+i],16));disps=disps+strArr[j*blockbytes+i];}tv.setText(disps+"\n");status = ourmifare.iso15693writeblock( flags, (byte)(startblock+j), (byte)1, myuid,(byte)blockbytes, mydatabuf) ;if (status==0){j++;}else{j=blocknum;}}if (status==0){ourmifare.pcdbeep(38);tv.setText("写15693标签数据操作成功!");} else {PrintErrInf(status);   //错误代码提示}}public void write15693uid(View view){byte afi;byte myctrlword = 0;              //读写控制字,一般取0 就行了byte[] olduid = new byte[8];       //8字节卡序列号缓冲byte[] newuid = new byte[8];       //8字节卡序列号缓冲tv.setText("");EditText ctrafi=findViewById(R.id.textafi) ;String afistr=ctrafi.getText().toString().trim();if (afistr.length() < 2){tv.setText("应用标识AFI是2位16进制数据,请输入正确的AFI!");return;}else {afi=(byte) Integer.parseInt(afistr, 16);  }EditText ctrnewuid=findViewById(R.id.edittextnewuid) ;String newuidstr=ctrnewuid.getText().toString().trim();if (newuidstr.length() < 16){tv.setText("UID是16位16进制数据,请输入正确的UID!");return;}else {for(int i=0;i<8;i++) {newuid[i]=(byte)Integer.parseInt(newuidstr.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}}byte status = ourmifare.iso15693writeuid( myctrlword, afi, olduid, newuid) ;if (status==0){ourmifare.pcdbeep(38);tv.setText("写UID操作成功!");} else {PrintErrInf(status);   //错误代码提示}}public void PrintErrInf(byte errcode) {String dispstr="";switch(errcode){case 8:dispstr="错误代码:8,未寻到卡,请重新拿开卡后再放到感应区!";break;case 9:dispstr="错误代码:9,有多张卡在感应区,寻卡过程中防冲突失败,读序列吗错误!";break;case 10:dispstr="错误代码:10,该卡可能已被休眠,无法选中卡片!";break;case 13:dispstr="错误代码:13,读卡块失败!";break;case 14:dispstr="错误代码:14,写本块失败!";break;case 21:dispstr="错误代码:21,没有动态库!";break;case 22:dispstr="错误代码:22,动态库或驱动程序异常!";break;case 23:dispstr="错误代码:23,发卡器尚未插入!";break;case 24:dispstr="错误代码:24,操作超时,一般是动态库没有反映!";break;case 25:System.out.print("错误代码:25,发送字数不够!");break;case 26:System.out.print("错误代码:26,发送的CRC错!");break;case 27:System.out.print("错误代码:27,接收的字数不够!");break;case 28:System.out.print("错误代码:28,接收的CRC错!");break;case 41:System.out.print("错误代码:41,选中卡操作失败!");break;case 42:System.out.print("错误代码:42,让卡从静止中重起准备失败!");break;case 44:System.out.print("错误代码:44,一次写块不能超过12块!");break;case 46:System.out.print("错误代码:46,写AFI失败!");break;default:System.out.print("未知错误,错误代码:"+Integer.toString(errcode));break;}tv = findViewById(R.id.sample_text);tv.setText(dispstr);}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低轨卫星最低轨道高度及发展意义

一、天与空的区别 “空”指的是地球表面到大气层之内的高度范围&#xff0c;通过气球、飞机、飞艇等航空器可达&#xff1b;而大气层之外的空间&#xff0c;才可以称之为“天”&#xff0c;一般需要通过火箭才可到达。 1960年第53届巴塞罗那国际航空联合大会决议规定&#xf…

阿里云 WindowsServer 使用之 配置 SQL Server 允许远程连接

阿里云 WindowsServer 使用之 配置 SQL Server 允许远程连接 第一步&#xff1a;安装 SQL Server 数据库 这是一个很详细的安装教程&#xff0c;可以参考一下 安装SQL Server详细教程 需要注意&#xff1a;安装实例时&#xff0c;建议在‘身份验证模式’直接选择“混合模式”…

编码技巧(二) element-ui table中根据状态控制是否可以勾选

项目中使用element-ui时,表格中的数据有不同的状态,需要对某个状态的数据进行 勾选操作 如图所示: 只有id为12的符合条件可以进行勾选 <el-table-column type="selection" header-align="center" :selectable="selectable" align="c…

Maven 基础总结篇

Maven 基础总结篇 Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构&#xff1a;用于解决不同IDE&#xff08;例如eclipse与IDEA&#xff09;不同的项目结构的问题 提供了一套标准化的构建流程&#xff08;编译&…

Redis底层原理

持久化 Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。 RDB RDB持久化是把当前进程数据生成快照保存到硬盘的过程。所谓内存快照,就是…

网络爬虫中的代理IP应用与高效管理策略探析

在网络爬虫技术日益普及的今天&#xff0c;面对目标网站对访问频率、IP地址等的严格限制&#xff0c;如何合理、有效地利用和管理代理IP资源成为了一项至关重要的任务。本文将深入探讨代理IP在爬虫项目中的应用&#xff0c;并提出一套科学高效的管理策略。 一、代理IP在网络爬…

分布式I/O应用于智慧停车场的方案介绍

客户案例背景 目前车位检测技术有磁电技术、超声波技术、红外线技术、图像识别车位技术。考虑到例如电磁干扰、信号干扰等的环境因素影响&#xff0c;通常会采用组合使用的方式进行&#xff0c;如采用不同的传感器、应用不同的协议等&#xff0c;以便提高车位检测的准确性和实时…

xilinix 7系列器件生成已加密文件和已经过身份验证的文件

注释 &#xff1a;如需了解更多信息&#xff0c;请参阅《使用加密确保 7 系列 FPGA 比特流的安全》(XAPP1239)。 要生成加密比特流&#xff0c;请在 Vivado IDE 中打开已实现的设计。在主工具栏中&#xff0c;依次选择“Flow” → “Bitstream Settings”&#xff08;流程 >…

Go语言学习笔记(二)

Go语言的学习资源 以下是一些推荐的Go语言学习资源的链接&#xff1a; Go语言教程&#xff1a;https://golang.org/doc/Go by Example&#xff1a;Go by ExampleGolang Tutorials&#xff1a;https://golangtutorials.com/Go语言第一课&#xff08;慕课网&#xff09;&#x…

每周三提前预知:绝地求生27.2版本最早1月10日上线,交易所系统、召唤掩体等新功能上线

嗨&#xff0c;我是闲游盒 27.2新版本预计最早1月10日上线&#xff0c;届时会停机更新约9小时&#xff0c;大家注意合理安排游戏时间! 这次更新带来了很多荣都地图的新玩法&#xff0c;主打的交易所系统即将上线! PUBG官方已经发布了预告 交易所系统 而这次的交易所系统玩法…

常见排序算法及其稳定性分析

前言&#xff1a; 排序算法可以说是每一个程序员在学习数据结构和算法时必须要掌握的知识点&#xff0c;同样也是面试过程中可能会遇到的问题&#xff0c;在早些年甚至还会考冒泡排序。由此可见呢&#xff0c;掌握一些常见的排序算法是一个程序员的基本素养。虽然现在的语言标…

k8s的node亲和性和pod亲和性和反亲和性 污点 cordon drain

node亲和性和pod亲和性和反亲和性 污点 cordon drain 集群调度: schedule的调度算法 预算策略 过滤出合适的节点 优先策略 选择部署的节点 nodeName:硬匹配&#xff0c;不走调度策略&#xff0c;node01 nodeSelector:根据节点的标签选择&#xff0c;会走调度的算法 只…

PSoc62™开发板之PWM呼吸灯

实验目的 利用PWM动态调节输出功率达到控制LED呼吸变化的效果 实验准备 PSoc62™开发板&#xff08;开发板已经板载LED&#xff09; 板载资源 板载有多少pwm 创建工程例程&#xff0c;在libraries/HAL_Drivers/drv_pwm.h中查看BSP支持的pwm数量及对应的GPIO&#xff0c;可…

pgsql中epoch用法

问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 昨天又被叫回来加班,説是数据问题,又回来加班搞,到了以后发现数据没问题,那就是查询接口的事了,写查询接口的人用时间戳去查询,明明直接可以直接用日期查询,非得改成时间戳查询,结果还是有问题,接下来复盘一下…

centos安装gradle

1.将gradle.zip拷到centos 解压 2.配置环境变量 vim /etc/profile 在最后添加 export GRADLE_HOME/zx/gradle-8.5 export PATH$PATH:$GRADLE_HOME/bin:${PATH} 之后source /etc/profile gradle -version 安装成功

RK3566环境搭建

环境&#xff1a;vmware16&#xff0c;ubuntu 18.04 获取SDK前需要安装 sudo apt update sudo apt install -y repo git python 下载完成后先验证一下MD5码 md5sum rk356x_linux_release_v1.3.0b_20221213_split_dir/*firefly_split* 解压 rk3566ubuntu:/path/to$ mkdir ~…

【7-zip密码】7-Zip如何取消文件加密的密码

7z压缩包设置了密码&#xff0c;解压的时候就需要输入正确的密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了7z压缩包的密码…

Linux网络命令

文章目录 Linux网络网络配置命令1、ifconfig&#xff1a;查看网络接口信息&#xff08;显示所有活动网卡&#xff09;1.1 常用命令格式1.2 命令格式&#xff08;图文详解&#xff09;1.2.1 临时修改网卡名称1.2.2 永久修改网卡名称1.2.3 永久修改单个网卡 2、hostname&#xff…

JAVA面向对象基础-容器

一、泛型 我们可以在类的声明处增加泛型列表&#xff0c;如&#xff1a;<T,E,V>。 此处&#xff0c;字符可以是任何标识符&#xff0c;一般采用这3个字母。 【示例9-1】泛型类的声明 1 2 3 4 5 6 7 8 9 10 class MyCollection<E> {// E:表示泛型; Object[] o…

ESP32_ADC(Arduino)

ADC模数转换 ESP32集成了12位的逐次逼近式ADC&#xff0c;分别为ADC1模块ADC2模块&#xff0c;共支持18个模拟输入通道: ADC1模块&#xff1a;8个通道&#xff0c;32~39ADC2模块&#xff1a;10个通道&#xff0c;0&#xff0c;2&#xff0c;4&#xff0c;12 ~ 15&#xff0c;…