Android NFC NFA读取

      弄到一个Nfca类型的不知道怎么读。我们以前用的是MifareUltralight类型,那个简单直接拿到readPage,读取扇区就行。好了,从头开始百度 android nfca 标签怎么读取。ok有一堆,几乎都没有用,别问我怎么知道的。我这个菜鸡弄这个弄了整整两天,然而大部分时间都是混水。开始了贴代码,

 @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //当该Activity接收到NFC标签时,运行该方法
        //调用工具方法,读取NFC数据
        //获取到Tag标签对象
        mTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        String[] techList = mTag.getTechList();
        Log.e("标签支持的tachnology类型:", "");
        System.out.println("标签支持的tachnology类型:");
        for (String tech : techList) {
            Log.e("标签支持的tachnology类型:", tech);
            stringBuffer.append(tech + ",");
        }
        stringBuffer.append("\n");

      /*  try {
            ndef.connect();
            boolean connected = ndef.isConnected();
            byte[] id = mTag.getId();
            for (int i = 0; i < id.length; i++) {
                Log.e("ididid","---"+id[i]);
            }
            if(connected){
                Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
                        NfcAdapter.EXTRA_NDEF_MESSAGES);

              *//*  if(ndefMessage!=null){
                    NdefRecord[] records = ndefMessage.getRecords();
                    Toast.makeText(this, "records"+ndefMessage, Toast.LENGTH_SHORT).show();
                }*//*


            }
        } catch (IOException e) {
            e.printStackTrace();
        }*/


        NfcA nfcA = NfcA.get(mTag);
        try {
            nfcA.connect();
        } catch (IOException e) {
            e.printStackTrace();
        }


        boolean connected = nfcA.isConnected();
        if (connected) {
            Toast.makeText(this, "连接成功", Toast.LENGTH_SHORT).show();
/*
            byte[] DATA_READ = new byte[]{
                    (byte) 0X11,(byte)0x00, (byte) 0xef
            };*/
      //NTAG216的芯片
            byte[] DATA_READ = {
                    (byte) 0x30,
                    (byte) 8 & 0x0ff,//0x05
            };


            try {
                data_res = nfcA.transceive(DATA_READ);
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT).show();
            }

            stringBuffer.append("TagId:");
            byte[] mTagId = mTag.getId();
            for (int i = 0; i < mTagId.length; i++) {
                Log.e("TagId", mTagId[i] + "");
                stringBuffer.append(mTagId[i]);
            }
            stringBuffer.append("\n");

            stringBuffer.append("atqa1:");
            byte[] atqa1 = nfcA.getAtqa();
            for (int i = 0; i < atqa1.length; i++) {
                Log.e("atqa1", atqa1[i] + "");
                stringBuffer.append(atqa1[i] + ",");
            }
            stringBuffer.append("\n");


            short sak = nfcA.getSak();
            stringBuffer.append("sak:" + sak + "\n");

            textView.setText(stringBuffer.toString() + nfcA.getMaxTransceiveLength());

            if (data_res == null) {
                return;
            }
            if (data_res.length > 0) {
                Toast.makeText(this, "读取成功", Toast.LENGTH_SHORT).show();
                for (int i = 0; i < data_res.length; i++) {
                    Log.e("dataRes" + i + "------", data_res[i] + "");

                }
                String s = new String(data_res, Charset.forName("utf-8"));
                Log.e("dataRes", s);
            }
        } else
            Toast.makeText(this, "连接失败", Toast.LENGTH_SHORT).show();

我也开始也不明白,nfca的 transceive()这个方法,之所以这么少是因为的,这个nfc对应的厂家有不同的命令我之前还

问做硬件的这个命令是什么,他也不知道,然后我们有一份文档找到了这个,下面这个读取十六字节的命令,后来这个也是不行

,还爆了(Taw lost)因为我们的nfc不是这个类型的。然后在网上看到一片文章,用了下他的命令就成功了!!另外以我的理解

0x30 是读的命令,0x08应该是读取到那个扇区。好了,祝你成功。

大佬文章:https://blog.csdn.net/shjn2004/article/details/52287927

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
B: 3NFC1NF,2NF,和BCNF是独立的,它们之间的关系是任意的。一个关系模式的范式级别越高,则其数据冗余度越小,数据一致性和完整性越好,但是也要求满足的条件越严格。 1NF(第一范式):关系模式中的所有属性都是原子性的,即不可再分。例如,一张学生表,姓名、学号、性别等属性都是原子属性,而地址属性如果拆分成省、市、县、街道等属性,则不满足1NF。 2NF(第二范式):在满足1NF的基础上,非主键属性对主键必须完全依赖,即非主键属性不能依赖于主键的一部分。例如,一个订单表,订单号和商品号组成联合主键,数量和单价是非主键属性,如果将数量和单价拆分成两个属性,就不满足2NF。 3NF(第三范式):在满足2NF的基础上,非主键属性之间不能存在传递依赖关系。例如,一个学生选课表,学生号、课程号、成绩是属性,如果将学生号和课程号组成联合主键,成绩依赖于课程号而不是学生号,就存在传递依赖,不满足3NF。 BCNF(巴斯-科德范式):在满足3NF的基础上,任何非主属性都不能依赖于非超键的其他属性,即不存在任何冗余的依赖关系。如果存在这样的依赖关系,则需要进行分解,使其满足BCNF。 因此,这些范式级别是独立的,它们之间的关系是任意的。但是,一般情况下,我们一般都是先满足1NF,再满足2NF,再满足3NF,最后再考虑BCNF。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值