• 6.NFC之非NDEF格式


    先看流程图

    使用步骤:

    第一步:声明权限

    <!-- 允许应用程序使用NFC功能 -->
    <uses-permission android:name="android.permission.NFC" />

    第二步:Activity设置能拦截的NFC tag,不需要拦截ACTION_NDEF_DISCOVERED类型的NDEF标签,标题说了拦截非NDEF的tag     

            <activity
                android:name="com.example.nfcdemo.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <!-- 能拦截TECH_DISCOVERED的tag -->
                <intent-filter>
                    <action android:name="android.nfc.action.TECH_DISCOVERED" />
                </intent-filter>
                <!-- TECH_DISCOVERED中哪些部分的tag,在xml文件中找 -->
                <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                    android:resource="@xml/nfc_tech_filter" />
                <!-- 能拦截ACTION_TAG_DISCOVERED,好像拦截了,也没啥用,又处理不了-->
                <intent-filter>
                    <action android:name="android.nfc.action.TAG_DISCOVERED" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>

    其中,nfc_tech_filter.xml在res的xml文件夹中(没有该文件夹则创建该文件夹)

    <?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>
        <!-- 以下只是显示怎么添加多个nfc支持类 -->
        <tech-list>
            <tech>android.nfc.tech.NfcV</tech>
        </tech-list>
        <tech-list>
            <tech>android.nfc.tech.NfcF</tech>
        </tech-list>
    
    </resources>
    View Code

     第三步:在拦截的Aty中

    private NfcAdapter nfcAdapter; // NFC适配器
    // 获取默认的NFC控制器,并进行判断
    nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    if (nfcAdapter == null) {
    Log.d("h_bl", "设备不支持NFC!");
    finish();
    return;
    }
    if (!nfcAdapter.isEnabled()) {
    Toast.makeText(getApplicationContext(), "请在系统设置中先启用NFC功能!", Toast.LENGTH_SHORT).show();
    Log.d("h_bl", "请在系统设置中先启用NFC功能!");
    return;
    }
    Intent intent = this.getIntent(); // 捕获NFC Intent
    praseIntent(intent);

    解析Intent

        private void praseIntent(Intent intent) {
    
            String nfcAction = intent.getAction(); // 解析该Intent的Action
            if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(nfcAction)) {
                Log.d("h_bl", "ACTION_TECH_DISCOVERED");
                Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); // 获取Tag标签,既可以处理相关信息
                for (String tech : tag.getTechList()) {
                    Log.d("h_bl", "该tag支持的tech=" + tech);
                }
                IsoDep isoDep = IsoDep.get(tag);
                String str = "";
                try {
                    isoDep.connect(); // 连接
                    if (isoDep.isConnected()) {
                        Log.d("h_bl", "isoDep.isConnected"); // 判断是否连接上
                        // 1.首先初始化的时候你要先读根目录3F00
                        byte[] ROOT_DIRECTORY={
                                (byte)0x00,
                                (byte)0xA4,
                                (byte)0x00,
                                (byte)0x00,
                                (byte)0x02,
                                (byte)0x3F,
                                (byte)0x00,
                                (byte)0x00
                        };
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (isoDep != null) {
                        try {
                            isoDep.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }

    解析过程:

    1.解析该Intent的Action

    2.获取Tag标签,既可以处理相关信息

    3.创建相关的类进行处理

    4.详见IsoDep类的使用

    还有一个前台调度系统,详见前台调度系统的使用。

  • 相关阅读:
    properties的编码问题
    在Spring中读取properties文件
    Intellij IDEA常用配置记录
    基于Shiro的登录功能 设计思路
    在SpringMVC中操作Session、Request、Response对象
    使用MockMVC与Junit进行单体测试
    django: form fileupload
    django: form
    django: db
    django: db
  • 原文地址:https://www.cnblogs.com/H-BolinBlog/p/5481751.html
Copyright © 2020-2023  润新知