读取NFC 卡片的ID

举报
程思扬 发表于 2022/01/05 15:36:09 2022/01/05
【摘要】 读取NFC 卡片的ID

初始化适配器 NfcAdapter PendingIntent

Intent nfcIntent = new Intent(this, getClass()); 
nfcIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
mAdapter = NfcAdapter.getDefaultAdapter(this); 
mPendingIntent = PendingIntent.getActivity(this, 0, nfcIntent, 0);
 String infoText = "看下这个支持nfc吗 或者 开了没"; 
 if (mAdapter == null) { 
      Toast.makeText(getApplicationContext(), 
      infoText, Toast.LENGTH_SHORT).show(); 
 } 

重写onNewIntent()方法

 @Override 
 protected void onNewIntent(Intent intent) { 
 Tag tag=intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 

 //获取 Tag 读取 ID 得到字节数组 转字符串 转码 得到卡号(默认16进制 这请自便)
 Long cardNo = Long.parseLong(flipHexStr(ByteArrayToHexString(tag.getId())), 16); 
 // if (cardNo.toString().getBytes().length == 10) { 
 num = cardNo.toString();
  // } else {
   // 转的时候有个地方需要注意下 如果开头为零的话 会省略所以位数会改变 
   // num = "0" + cardNo.toString(); 
   // } 
   TextView textView = (TextView) findViewById(R.id.nfc_text); 
   textView.setText(num); 
   Toast.makeText(getApplicationContext(), num, Toast.LENGTH_SHORT).show();
}

息屏之类的操作

@Override 
public void onPause() {
 super.onPause();
  if (mAdapter != null) { 
  mAdapter.disableForegroundDispatch(this); 
  } 
  } 
@Override
 public void onResume() { 
 super.onResume(); 
 mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); 
 }

最后附上转码工具类

public class ByteArrayTohexHepler {

    public static String flipHexStr(String s) { 
      StringBuilder result = new StringBuilder(); 
      for (int i = 0; i <= s.length() - 2; i = i + 2) { 
     result.append(new StringBuilder(s.substring(i, i + 2)).reverse()); 
 } 
   return result.reverse().toString();
} 
  
  // 16转10进制 
  public static String ByteArrayToHexString(byte[] inarray) { 
  int i, j, in; 
  String[] hex = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}; 
  StringBuilder out = new StringBuilder();
  
   for (j = 0; j < inarray.length; ++j) {
    in = (int) inarray[j] & 0xff; 
    i = (in >> 4) & 0x0f; 
   out.append(hex[i]); 
   i = in & 0x0f; 
   out.append(hex[i]); 
   } return out.toString(); 
 } 
}

大家有什么问题可以在下方留言

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。