Android NFC 读取卡片信息 您所在的位置:网站首页 安卓读取nfc的软件叫什么 Android NFC 读取卡片信息

Android NFC 读取卡片信息

2023-05-31 02:51| 来源: 网络整理| 查看: 265

NFC读取公交卡数据.gif

因为朋友需要个读取NFC卡片数据的功能,所以最近看了一下Android 系统下NFC 读取卡片信息的操作.

NFC(近距离无线通信 ) 是一组近距离无线技术,通常只有在距离不超过 4 厘米时才能启动连接.借助 NFC,您可以在 NFC 标签与 Android 设备之间或者两台 Android 设备之间共享小型负载。

支持 NFC 的 Android 设备同时支持以下三种主要操作模式: 读取器/写入器模式:支持 NFC 设备读取和/或写入被动 NFC 标签和贴纸。 点对点模式:支持 NFC 设备与其他 NFC 对等设备交换数据;- Android Beam 使用的就是此操作模式。 卡模拟模式:支持 NFC 设备本身充当 NFC 卡。然后,可以通过外部 NFC 读取器(例如 NFC 销售终端)访问模拟 NFC 卡。 NFC读取卡片数据流程: Android 设备通常会在屏幕解锁后查找 NFC 标签(停用NFC除外) 卡片接近启动标签调度系统 数据通过Intent携带数据启动Activity 标签调度系统定义了三种 Intent,按优先级从高到低列出如下: 1. ACTION_NDEF_DISCOVERED:如果扫描到包含 NDEF 负载的标签,并且可识别其类型,则使用此 Intent 启动 Activity。这是优先级最高的 Intent,标签调度系统会尽可能尝试使用此 Intent 启动 Activity,在行不通时才会尝试使用其他 Intent。 2. ACTION_TECH_DISCOVERED :如果没有登记要处理 ACTION_NDEF_DISCOVERED Intent 的 Activity,则标签调度系统会尝试使用此 Intent 来启动应用。此外,如果扫描到的标签包含无法映射到 MIME 类型或 URI 的 NDEF 数据,或者该标签不包含 NDEF 数据,但它使用了已知的标签技术,那么也会直接启动此 Intent(无需先启动 ACTION_NDEF_DISCOVERED)。 3. ACTION_TAG_DISCOVERED:如果没有处理 ACTION_NDEF_DISCOVERED 或者 ACTION_TECH_DISCOVERED Intent 的 Activity,则使用此 Intent 启动 Activity。 启动Activity 处理Intent携带的数据 实现读取北京地铁卡数据功能 1. 配置NFC权限 2. 配置NFC拉起页面的过滤器选项

!!注意 nfc_tech_filter.xml 是过滤NFC 卡片类型

android.nfc.tech.IsoDep android.nfc.tech.NfcA android.nfc.tech.NfcB android.nfc.tech.NfcF android.nfc.tech.NfcV android.nfc.tech.Ndef android.nfc.tech.NdefFormatable android.nfc.tech.MifareUltralight android.nfc.tech.MifareClassic 4. 启动页面代码 package com.wkq.nfc import android.content.Intent import android.nfc.NdefMessage import android.nfc.NdefRecord.createMime import android.nfc.NfcAdapter import android.nfc.NfcEvent import android.nfc.Tag import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil import com.wkq.nfc.databinding.ActivityMainBinding /** * NFC 拉起页面 */ class NFCActivity : AppCompatActivity(), NfcAdapter.CreateNdefMessageCallback { //支持的标签类型 private var nfcAdapter: NfcAdapter? = null private var binding: ActivityMainBinding? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) nfcAdapter = NfcAdapter.getDefaultAdapter(this) if (nfcAdapter==null){ Toast.makeText(this, "该机型不支持NFC", Toast.LENGTH_LONG).show() finish() } // Register callback *设置一个回调,使用Android Beam(TM)动态生成要发送的NDEF消息。 nfcAdapter?.setNdefPushMessageCallback(this, this) } override fun onResume() { super.onResume() // Check to see that the Activity started due to an Android Beam if (NfcAdapter.ACTION_TECH_DISCOVERED == intent.action) { processIntent(intent) } } override fun onPause() { super.onPause() nfcAdapter!!.disableReaderMode(this) } override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) setIntent(intent) } /** * 处理Intent携带的数据 */ private fun processIntent(intent: Intent) { // 处理北京公交卡的数据 var tag = intent.extras if (tag==null)return var content = NFCUtil.bytesToHex((tag!!.get("android.nfc.extra.TAG") as Tag).id) binding?.tvContent!!.text = content Toast.makeText(this, "获取北京地铁卡数据:" + content, Toast.LENGTH_LONG).show() } override fun createNdefMessage(event: NfcEvent?): NdefMessage { val text = "Beam me up, Android!\n\n" + "Beam Time: " + System.currentTimeMillis() return NdefMessage( arrayOf( createMime("application/vnd.com.example.android.beam", text.toByteArray()) ) ) } } 总结:

这里是简单的利用NFC读取卡片数据的操作,具体的数据处理只是简单的处理了北京公交卡的数据,具体项目业务上需要读取什么卡数据需要项目中具体去处理. 看都看了,点个赞呗



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有