Android NFC读卡

这篇具有很好参考价值的文章主要介绍了Android NFC读卡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

NfcAdapter mNfcAdapter;
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);


  @Override
    protected void onResume() {
        super.onResume();
//        NfcInstance.onResume(MainActivity.this, getContext());
        IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
        IntentFilter ndefDetected = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        IntentFilter techDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
        IntentFilter[] nfcIntentFilter = new IntentFilter[]{techDetected, tagDetected, ndefDetected};

        PendingIntent pendingIntent = PendingIntent.getActivity(
                this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
        if (mNfcAdapter != null)
            mNfcAdapter.enableForegroundDispatch(this, pendingIntent, nfcIntentFilter, null);

    }

    @Override
    protected void onPause() {
        super.onPause();
        if (mNfcAdapter != null)
            mNfcAdapter.disableForegroundDispatch(this);

//        NfcInstance.onPause(MainActivity.this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        patchTag(tag);
        if (tag != null) {
            readFromNFC(tag, intent);
        }
//        NfcInstance.onNewIntent(intent);

    }

    public Tag patchTag(Tag oTag) {
        if (oTag == null)
            return null;

        String[] sTechList = oTag.getTechList();

        Parcel oParcel, nParcel;

        oParcel = Parcel.obtain();
        oTag.writeToParcel(oParcel, 0);
        oParcel.setDataPosition(0);

        int len = oParcel.readInt();
        byte[] id = null;
        if (len >= 0) {
            id = new byte[len];
            oParcel.readByteArray(id);
        }
        int[] oTechList = new int[oParcel.readInt()];
        oParcel.readIntArray(oTechList);
        Bundle[] oTechExtras = oParcel.createTypedArray(Bundle.CREATOR);
        int serviceHandle = oParcel.readInt();
        int isMock = oParcel.readInt();
        IBinder tagService;
        if (isMock == 0) {
            tagService = oParcel.readStrongBinder();
        } else {
            tagService = null;
        }
        oParcel.recycle();

        int nfca_idx = -1;
        int mc_idx = -1;

        for (int idx = 0; idx < sTechList.length; idx++) {
            if (sTechList[idx] == NfcA.class.getName()) {
                nfca_idx = idx;
            } else if (sTechList[idx] == MifareClassic.class.getName()) {
                mc_idx = idx;
            }
        }

        if (nfca_idx >= 0 && mc_idx >= 0 && oTechExtras[mc_idx] == null) {
            oTechExtras[mc_idx] = oTechExtras[nfca_idx];
        } else {
            return oTag;
        }

        nParcel = Parcel.obtain();
        nParcel.writeInt(id.length);
        nParcel.writeByteArray(id);
        nParcel.writeInt(oTechList.length);
        nParcel.writeIntArray(oTechList);
        nParcel.writeTypedArray(oTechExtras, 0);
        nParcel.writeInt(serviceHandle);
        nParcel.writeInt(isMock);
        if (isMock == 0) {
            nParcel.writeStrongBinder(tagService);
        }
        nParcel.setDataPosition(0);
        Tag nTag = Tag.CREATOR.createFromParcel(nParcel);
        nParcel.recycle();

        return nTag;
    }

    private static StringBuilder bytesToString(byte[] bs) {
        StringBuilder s = new StringBuilder();
        for (byte b : bs) {
            s.append(String.format("%02X", b));
        }
        return s;
    }

    private void readFromNFC(Tag tag, Intent intent) {

        try {
            byte[] id1 = tag.getId();
            StringBuffer stringBuffer = new StringBuffer();

            StringBuilder stringBuilder = bytesToString(id1);
            System.out.println("xxxxxxxxx record id1=" + new String(id1) + "stringBuilder=" + stringBuilder.toString());

            List<String> list = new ArrayList<>();

            for (int k = 0; k < 4; k++) {
                list.add(0, String.format("%02X", id1[k]));
            }

            for (int k = 0; k < list.size(); k++) {
                stringBuffer.append(list.get(k));
            }

            System.out.println("xxxxxxxxx record id1=" + new String(id1) + "stringBuffer=" + stringBuffer.toString());

        } catch (Exception e) {

        }
    }
import android.app.Activity
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.nfc.NfcAdapter
import android.nfc.Tag
import android.nfc.tech.MifareClassic
import android.nfc.tech.NfcA
import android.os.Bundle
import android.os.IBinder
import android.os.Parcel

object NfcInstance {

    lateinit var mNfcAdapter: NfcAdapter

    @JvmStatic
    fun onCreate(context: Context) {
        mNfcAdapter = NfcAdapter.getDefaultAdapter(context)
    }

    @JvmStatic
    fun onResume(activity: Activity, context: Context) {
        if (mNfcAdapter != null) {
            println("xxxxxxxxxxx onResume");
            val tagDetected = IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED)
            val ndefDetected = IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED)
            val techDetected = IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED)
            val nfcIntentFilter = arrayOf(techDetected, tagDetected, ndefDetected)

            val pendingIntent = PendingIntent.getActivity(
                context, 0, Intent(context, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0
            )
            if (mNfcAdapter != null) mNfcAdapter.enableForegroundDispatch(
                activity,
                pendingIntent,
                nfcIntentFilter,
                null
            )
        } else {
            println("xxxxxxxxxxx onResume null");
        }
    }

    @JvmStatic
    fun onPause(activity: Activity) {
        println("xxxxxxxxxxx onPause");
        if (mNfcAdapter != null) mNfcAdapter.disableForegroundDispatch(activity)
    }

    @JvmStatic
    fun onNewIntent(intent: Intent) {
        println("xxxxxxxxxxx onNewIntent");
        if (mNfcAdapter != null) {
            val tag = intent.getParcelableExtra<Tag>(NfcAdapter.EXTRA_TAG)
            patchTag(tag)
            tag?.let { readFromNFC(it, intent) }
        }
    }

    private fun bytesToString(bs: ByteArray): StringBuilder {
        val s = java.lang.StringBuilder()
        for (b in bs) {
            s.append(String.format("%02X", b))
        }
        return s
    }

    interface OnReadListener {
        fun onRead(value: String, sourceValue: String);
    }

    lateinit var listener: OnReadListener

    @JvmStatic
    fun setOnReadListener(listener: OnReadListener) {
        NfcInstance.listener = listener;
    }

    private fun readFromNFC(tag: Tag, intent: Intent) {
        try {
            val id1 = tag.id
            val stringBuffer = StringBuffer()
            val stringBuilder: StringBuilder = bytesToString(id1)
            println("xxxxxxxxx record id1=" + String(id1) + "stringBuilder=" + stringBuilder.toString())

            var mutableList = mutableListOf<String>()
            var index = 0;
            for (k in id1) {
                if (index < 4) {
                    var temp = String.format("%02X", k)
                    mutableList.add(temp)
                    index++
                    break
                }
            }
            mutableList = mutableList.asReversed();
            for (k in mutableList) {
                stringBuffer.append(k);
            }
            listener.onRead(stringBuffer.toString(), stringBuilder.toString())

            println("xxxxxxxxx record id1=" + String(id1) + "stringBuffer=" + stringBuffer.toString())
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    fun patchTag(oTag: Tag?): Tag? {
        if (oTag == null) return null
        val sTechList = oTag.techList
        val oParcel: Parcel
        val nParcel: Parcel
        oParcel = Parcel.obtain()
        oTag.writeToParcel(oParcel, 0)
        oParcel.setDataPosition(0)
        val len = oParcel.readInt()
        var id: ByteArray? = null
        if (len >= 0) {
            id = ByteArray(len)
            oParcel.readByteArray(id)
        }
        val oTechList = IntArray(oParcel.readInt())
        oParcel.readIntArray(oTechList)
        val oTechExtras = oParcel.createTypedArray(Bundle.CREATOR)
        val serviceHandle = oParcel.readInt()
        val isMock = oParcel.readInt()
        val tagService: IBinder?
        tagService = if (isMock == 0) {
            oParcel.readStrongBinder()
        } else {
            null
        }
        oParcel.recycle()
        var nfca_idx = -1
        var mc_idx = -1
        for (idx in sTechList.indices) {
            if (sTechList[idx] === NfcA::class.java.name) {
                nfca_idx = idx
            } else if (sTechList[idx] === MifareClassic::class.java.name) {
                mc_idx = idx
            }
        }
        if (nfca_idx >= 0 && mc_idx >= 0 && oTechExtras!![mc_idx] == null) {
            oTechExtras[mc_idx] = oTechExtras[nfca_idx]
        } else {
            return oTag
        }
        nParcel = Parcel.obtain()
        nParcel.writeInt(id!!.size)
        nParcel.writeByteArray(id)
        nParcel.writeInt(oTechList.size)
        nParcel.writeIntArray(oTechList)
        nParcel.writeTypedArray(oTechExtras, 0)
        nParcel.writeInt(serviceHandle)
        nParcel.writeInt(isMock)
        if (isMock == 0) {
            nParcel.writeStrongBinder(tagService)
        }
        nParcel.setDataPosition(0)
        val nTag = Tag.CREATOR.createFromParcel(nParcel)
        nParcel.recycle()
        return nTag
    }
}
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

    <tech-list>
        <tech>android.nfc.tech.IsoDep</tech>
    </tech-list>
</resources>
<uses-permission android:name="android.permission.NFC" />

<uses-feature
    android:name="android.hardware.nfc"
    android:required="true" />
<activity
    android:launchMode="singleTask"
    android:name=".choose_role.ChooseRoleActivity"
    android:screenOrientation="landscape">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <intent-filter>
        <action android:name="android.nfc.action.TECH_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <meta-data
        android:name="android.nfc.action.TECH_DISCOVERED"
        android:resource="@xml/nfc_tech_filter" />
</activity>

文章来源地址https://www.toymoban.com/news/detail-822505.html

到了这里,关于Android NFC读卡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android NFC 标签读写Demo与历史漏洞概述

    NFC 作为 Android 手机一个重要的短距特性,基本在所有 Android 中高端机型上均有支持,但说实话本人原先却很少了解和使用……为了深入探索 NFC 的安全风险,本文先来记录学习下 Android NFC 的一些基础知识、玩法、标签读写开发,并简述下业界对 NFC 特性发现的相关历史漏洞情

    2023年04月11日
    浏览(38)
  • Android Studio安卓读写NFC Ntag标签源码

    本示例使用的发卡器:  https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-21818769070.11.3513789erHXVGxid=615391857885 源码下载:AndroidstudioRFIDNFC读写源码资源-CSDN文库 

    2024年01月15日
    浏览(44)
  • C# .aspx网页获取RFID读卡器HTTP协议提交的访问文件Request获得卡号、机号,Response回应驱动读卡器显示响声

      本示例使用的设备:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) 服务端代码: 前端脚本 :

    2024年02月11日
    浏览(39)
  • VbScript脚本Request获取RFID读卡器以HTTP提交的访问文件中的参数Response回应驱动读卡器显示、播报语音

    本示例使用的设备:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) 

    2024年02月11日
    浏览(39)
  • 手机出现 不读卡 / 无信号时应该怎么办?

    当手机屏幕亮起,一般在屏幕最上方都会有代表手机卡状态的显示,其中网络信号和读卡状态的标识,依旧有很多人分不太清,更不清楚改怎么办了。 1、当我们的手机里有两张卡时,则会有两个信号显示 2、信号状态一般是由短到长的五条竖杠组成,代表我们的手机接收到信

    2024年02月12日
    浏览(94)
  • 【STM32】STM32使用RFID读卡器

    RFID卡片 ID卡(身份标识):作用就是比如你要输入学号,你刷卡直接就相当于输入学号,省去了输入的过程 IC卡:集成电路卡,是将一种微电子芯片嵌入卡片之中 RFID的操作 1、初始化 (1)请求卡—寻找附近所有信号的卡 (2)防碰撞—选择一张信号最强的卡(得到卡的ID) (3)选卡

    2024年02月06日
    浏览(45)
  • stm32驱动RFID高频读卡器读取IC卡

    RFID(Radio-Frequency Identification)高频读卡器是一种设备,用于读取和解析高频(13.56 MHz)频段上的RFID标签信息。这种读卡器通过无线射频技术与标签进行通信,并从标签中获取存储的数据。 RFID高频读卡器通常包括以下主要 组件 : 读卡器天线:用于发射和接收射频信号,与标

    2024年02月11日
    浏览(45)
  • STM32CubeMX教程30 USB_DEVICE - MSC外设_读卡器

    正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板 USB_OTG_FS为工作在Mass Storage Class(大容量存储类)模式下的USB_DEVICE(USB从机),使其作为SD卡读卡器在Windows系

    2024年02月19日
    浏览(40)
  • NFC无源标签协议

    无源NFC接口基于 ISO/IEC 14443-3 A 类标准; 命令+起始地址+结束地址+数据 = 1+1+1+64 = 67字节,每次写入的命令和地址都是一样的; 第一包数据必须发送该字符串数据\\\" picksmartM=1H=128W=296S=1C=1 \\\",否则不会处理后面的数据; 因为每一包的数据必须发满64字节,而第一包字符串数据不够6

    2024年02月07日
    浏览(41)
  • NFC无线取电

    NFC技术发展到如今,随着移动设备的普及,已经应用到了智能家居、智慧交通、移动支付等领域,与人们的生活息息相关。然而现在市场上绝大多数的NFC芯片都是用于近场通讯的功能,很少有NFC芯片会用到近场无线能量传输的能力。随着NFC标准官方组织NFC论坛最新宣布的新的

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包