如何以原始格式查看NFC标签对象

时间:2013-12-21 03:21:31

标签: android nfc

我在Android API指南的NFC基础知识中读到了Tag对象。然后我将这个enter link description here项目添加到我的Eclipse环境中,并可以在Samsung Note上运行它。我现在想要查看代码中创建的Tag对象。我已经标记了我已添加到现有代码中的代码。我不确定是否正确。无论如何,我可以看到我在代码中的Tag对象里面是什么?我确实尝试添加一个断点,并查看我在变量中的内容,但是我没有看到一个名为tag的变量。以下是来源代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Log.d(TAG, "onCreate");

    setContentView(R.layout.main);

    // initialize NFC
    nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    nfcPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    // Register Android Beam callback
    nfcAdapter.setNdefPushMessageCallback(this, this);
    // Register callback to listen for message-sent success
    nfcAdapter.setOnNdefPushCompleteCallback(this, this);
    /***********************************
     * I added this portion of the code myself to view the tag object
     ***************************/
    Intent intent = new Intent(NfcAdapter.ACTION_TAG_DISCOVERED);
    intent.putExtra(NfcAdapter.EXTRA_TAG, "");
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    //************************************************************
    if(getIntent().hasExtra(NfcAdapter.EXTRA_TAG)) {
        TextView textView = (TextView) findViewById(R.id.title);
        //textView.setText("Hello NFC tag from home screen!");
        textView.setTag(tag);
    };

    printTagId(getIntent());
}

1 个答案:

答案 0 :(得分:0)

Tag对象是指向Android NFC服务与正确标记通信的句柄。除了检测到支持的通信技术以及标签ID(在通信协议的枚举或防冲突阶段使用)之外,它不包含有关标签的大量信息。您可以使用getTechList()方法(针对支持的通信技术)和getId()方法(针对标记的标识符)获取该信息。

除此之外,Tag对象本身不包含有关标记结构或内容的任何信息。因此Tag对象中没有“查看”的内容。事实上它甚至比那更复杂:

非接触式令牌可以是纯存储卡(提供读取和写入数据的某些命令),也可以是处理器智能卡(包含可通过智能卡命令连接的应用程序)。使用当前标准化(通过NFC论坛)NFC标签,有四种不同的标签类型。它们的通信协议和内存布局不同。其中一个甚至可以基于处理器智能卡。除了那些标准化的标签类型,还存在几种NFC兼容的标签类型,它们在内存布局和通信协议方面也有所不同。

因此,如果您要检索标记的结构和数据,则需要实现该标记的特定通信协议(有时您甚至需要知道确切的内存布局)。

但有一个例外:NFC标签存在一个抽象层:NDEF(NFC数据交换格式)。当前的NFC设备通常为至少四种标准化标签类型实现该抽象层。如果您的标记受支持(您可以通过浏览标记技术列表或仅通过尝试使用Ndef.get(tag)获取实例来查找),则可以使用Ndef的方法获取标记的NDEF内容您的Tag对象的实例。

顺便说一下。各种Android UI元素的getTag() / setTag()方法与NFC标记完全无关。因此,使用它们存储标记句柄没有多大意义。