Android NFC

NFC的安卓事儿(第二篇) (第二篇:安卓系统如何去处理感应到的NFC标签) 上一篇我们简单了解了NFC领域的相关信息,尤其是目前安卓平台能对NFC所支持的情况,这能帮助我们在开发的时候有个大概的功能把握,从而主导我们在实际项目中能去实现相应的功能。那么,我们现在可以从安卓平台上重点了解整个运行机制了。本篇将从基础层次开始讲述安卓系统在实现NFC感应和处理数据上的流程和技术,只有从整体上把握才能让我们在接下来去探究技术细节 阅读详情

1、NFC基础知识

NFC(Near Field Communication):一种无线协议,它连接的距离是4cm以内。广泛用于银行卡,信用卡,公交卡,门禁卡等等。

2、NFC与蓝牙,红外对比

这里写图片描述

3、Android与NFC

Android2.3(api=9)开始支持NFC技术,但在android2.x和3.x对NFC的支持非常有限。从android4.x后可以利用NFC技术传递较大的数据(NFC利用蓝牙传输大量数据)
android sdk api主要支持NFC论坛标准,这个标准称为NDEF(NFC Data Exchange Fromat,NFC数据交换格式)。android sdk api支持如下3种NDEF数据的操作

  • 从NFC标签中取出NDEF格式数据。
  • 向NFC标签中写入NDEF格式数据。
  • 通过Android Beam技术将NDEF数据发送给另一个NFC设备

4、NFC的三种过滤机制

在一个NFC设备读取NFC标签或者另 一个NFC设备中的数据之前会有0.1秒之内建立连接,然后数据会自动从被读取一端读取数据的一端。数据接受端会根据具体数据格式和标签类型调用相应的Activity(也称Tag Dispatch)。Activity需要定义Intent Filter。这些Intent Filter中会有指定不同的过滤机制。这就是NFC的三重过滤机制。

这里写图片描述


android匹配流程如下图:

这里写图片描述

5、NFC程序的编写步骤

1、设置权限

<uses-permission android:name="android.permission.NFC" />

2、设置android sdk版本

<uses-sdk android:minSdkVersion="14"/>

3、限制安装设备,如果该设备不支持,则不允许安装应用

<uses-feature android:name="android.hardware.nfc" android:required="true" />

4、定义接收Tag的Activity


5、实例:手机靠近NFC贴纸自动打开网页

需要有支持NFC的手机,还需要上网买NFC贴纸,价格一般2元左右。

1、在清单文件中添加过滤,并且设置activity的启动模式为singleTop

singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。

当设置这样启动模式的时候
在Activity第一次启动的时候执行到onCreate()-onStart()-onResume()等生命周期,也就是在第一次启动Activity并不会执行onNewIntent(),当再次启动Activity的时候,就不走onCreate()的生命周期,而会走onNewIntent()-onRestart()-onStart()-onResume

  <activity
            android:launchMode="singleTop"
            android:name=".NFCWriteActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>

2、在activity中代码

public class NFCWriteActivity extends Activity  {

    private NfcAdapter nfcAdapter;
    private PendingIntent mPendingIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wirte);

        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()), 0);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Tag datectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        wirteNfcTag(datectedTag);
    }

    private void wirteNfcTag(Tag tag) {
        if (tag == null) {
            return;
        }
        //将URL写入到NedfMessage中
        NdefMessage ndefMessage = new
                NdefMessage(new NdefRecord[]{NdefRecord.
                createUri(Uri.parse("http://www.baidu.com"))});

        Ndef ndef = Ndef.get(tag);
        try {
            ndef.connect();
            //写入到NFC标签中
            ndef.writeNdefMessage(ndefMessage);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Toast.makeText(NFCWriteActivity.this, "写入url成功", Toast.LENGTH_SHORT).show();


    }

    @Override
    protected void onResume() {
        super.onResume();
        if (nfcAdapter != null) {
          nfcAdapter.enableForegroundDispatch(this,mPendingIntent,null,null);
        }
    }

    @Override
    protected void onStop() {
        super.onStop();

        if(nfcAdapter!=null){
            nfcAdapter.disableForegroundDispatch(this);
        }
    }

}

6、NFC读取编码号

代码如下

package com.example.nfc;

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.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView text;
    private NfcAdapter mNfcAdapter;
    private PendingIntent pi;
    private IntentFilter tagDetected;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text= (TextView) findViewById(R.id.text);
        //初始化NfcAdapter
        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
        //初始化PendingIntent
        // 初始化PendingIntent,当有NFC设备连接上的时候,就交给当前Activity处理
        pi = PendingIntent.getActivity(this, 0, new Intent(this, getClass())
                .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
        // 新建IntentFilter,使用的是第二种的过滤机制
//    tagDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
//    tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        // 当前app正在前端界面运行,这个时候有intent发送过来,那么系统就会调用onNewIntent回调方法,将intent传送过来
        // 我们只需要在这里检验这个intent是否是NFC相关的intent,如果是,就调用处理方法
        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
            processIntent(intent);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (mNfcAdapter != null) {
            mNfcAdapter.enableForegroundDispatch(this,pi,null,null);
        }
    }

    /**
     * Parses the NDEF Message from the intent and prints to the TextView
     */
    private void processIntent(Intent intent) {
        //取出封装在intent中的TAG
        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        String CardId =ByteArrayToHexString(tagFromIntent.getId());
        text.setText(CardId);
        Log.i("nfc",CardId);
    }

    public static void startActivity(Context context){
        Intent intent = new Intent();
        intent.setClass(context,MainActivity.class);
        context.startActivity(intent);
    }

    private String ByteArrayToHexString(byte[] inarray) {
        int i, j, in;
        String[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
                "B", "C", "D", "E", "F" };
        String out = "";


        for (j = 0; j < inarray.length; ++j) {
            in = (int) inarray[j] & 0xff;
            i = (in >> 4) & 0x0f;
            out += hex[i];
            i = in & 0x0f;
            out += hex[i];
        }
        return out;
    }
}

demo下载地址as版
http://download.youkuaiyun.com/detail/androidxiaogang/9508215

android usb读写,安卓(Android)下如何开发USB NFC读写器app 对安卓工程师来说,在安卓下使用USB设备需要了解很多硬件的内容,这可能会导致工程周期的延长或者app的不稳定。为了将这种风险降到最低,友我科技发布了NFC读写器在安卓下的sdk,使用NFC读写器的类接口,安卓工程师就可以直接调用NFC读写器了,简单可靠。NFC读写器的安卓库文件为:yoworfidreader.jar在ADT工程中导入yoworfidreader.jar库文件,即可在工程中引用NF... 阅读详情

相关推荐

手机nfc_如何在Android中编写NFC标签

手机nfc 这篇文章介绍了如何在Android中使用NFC编写智能标签。 Android智能手机不仅能够读取包含URL,电话号码等数据的NFC标签,但使用Android NFC Api可以写入NFC标签。 在本文中,我们将探讨如何使用Android Api编写NFC智能标记。 什么是NFC技术? 在深入探讨如何在Android中使用NFC的细节之前,先介绍一下什么是NFC技术是很有用的。...

cunhu4317的博客 2922

Nfc 开发记录总结

整个篇幅 上面为代码,最后面为介绍,如果想直接看我遇到过的坑,点击目录第二条,先来个NDEF写入代码:主要在Activity中的生命周期中调用

JiaoJunfeng 2300

Android之NFC

NFC简介: Near Field Communication 近场通信,是一种数据传输技术。 与wifi、蓝牙、红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4cm。 NFC支持3种工作模式: 1.读卡器模式; 2.仿真卡模式; 3.点对点模式; 1.读卡器模式: 通过NFC设备(支持NFC的Android手机)从带有NFC芯片的标签、贴纸、报纸、明信片等...

bear_huangzhen的专栏 4万+

如何清除/重置一枚NFC标签教程

如果您的NFC标签已经写入了数据,然后您又想把他清除或者重置,请按照如下教程 1.首先下载APP ,TagWriter,这是芯片厂商NXP官方推出的APP,可以说是最权威的,木有之一,大家可以去Google play下载,或者去「NFC之家」的下载频道下载,然后准备好你要清除的NFC标签 [img]http://dl2.iteye.com/upload/attachment/0105/1003...

{丸の子} 1万+

NFC技术在Android上的实战应用:NFC READER读写程序

NFC(Near Field Communication)即近场通信技术,它是一种短距离的高频无线电技术,允许设备在几厘米内进行非接触式点对点数据传输。NFC技术的推出为移动设备用户提供了全新的交互方式,通过近场通信实现快速、安全且易于操作的数据交换。NFC(Near Field Communication)标签是一种用于短距离通信的无线射频识别技术,它允许设备之间通过非接触式的读写操作交换数据。NFC标签由一个微型天线和一个芯片组成,芯片中存储了数据,并通过天线与读取设备进行无线信号交换。

weixin_35950531的博客 1347

NFC技术整理

介绍了NFC技术的概念以及硬件设计时候所需要注意的地方

android——实现NFC的读写

一、NFC是什么?近距离无线通讯技术,这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。近场通信(Near Field Communication,NFC)是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。

sky2016_w的博客 2万+

android nfc读写公交卡,饭卡

android nfc读写公交卡,饭卡 android nfc读写公交卡,饭卡

NFC技术简介

NFC

u010783226的专栏 1万+

Android NFC 读取公交卡信息Demo

通过NFC的读模式,读取公交卡的余额和交易记录。 支持深圳通、羊城通、北京卡、八达通、武汉通等等

操作系统期末大题类型题解

额,OS主要这回考程序分析题,PV操作、生产者消费者啊,哲学家进餐问题,死锁问题啊,如何避免死锁,经典银行家算法,页面置换算法啥的,磁盘调度......总计还有很多,就不一一说了 PV操作 谈到PV操作,首先要了解什么是信号量,其实就是用来解决互斥与同步问题的,分为原语wait(S)和signal(S),也就是我们常说的PV操作,在这里给出王道上的概念 wait(S){ while(S>0) S=S-1; } signal(S){ S=S+1; } 记录型信号量

ZXxxiaoxuan的博客 792

安卓Android.nfc读卡

安卓,ANDROID,nfc,ic卡读取

walle167的博客 5351

arcgis根据矢量范围统计栅格数据众数、最大值、均值、中位数、最小值、少数等

像元统计数据 根据多个栅格数据计算每个像元的统计数据。 可用的统计数据有:众数、最大值、均值、中位数、最小值、少数、范围、标准差、总和及变异度。 https://desktop.arcgis.com/zh-cn/arcmap/10.3/tools/spatial-analyst-toolbox/an-overview-of-the-local-tools.htm ...

GIS哼哈哈的博客 6万+

安卓干货——安卓NFC通信

1 引言 NFC是近场通信(near field communication)的缩写。NFC技术是一种新兴的技术,使用了NFC技术的设备(比如手机)可以在彼此靠近的情况下(一般小于10cm)进行数据交换,是由非接触式射频识别(RFID)及互连互通技术整合演变而来,通过在单一芯片上集成感应式读卡器、感应式卡片和点对点通信的功能,利用移动终端实现移动支付、电子票务、门禁、移动身份识别、防伪等应用。 2 NFC技术 2.1 工作模式 NFC根据业务模式不同大概分为三种模式。 (1)读卡器模式   数据在NFC芯片

tangjianing的博客 2015

NFC门禁卡复制全解析:从M1卡到UID卡的攻防实践

本文深入解析了NFC门禁卡的安全机制与攻防实践。从M1卡基于Crypto1算法的原理漏洞讲起,详细阐述了利用Proxmark3等工具进行侦听、破解密钥及使用UID卡进行复制的完整攻击链条。同时,为防御方提供了从升级CPU卡、启用全扇区认证到部署多因子验证的系统性防护策略,旨在帮助管理员构建更稳固的物理安全防线。

weixin_29182481的博客 1401

OpenCv案例(七): 基于OpenCvSharp计算图像的清晰度(自动对焦)

自动对焦,其实是对相机成像的清晰值得计算,若对焦不清晰,成像的清晰度低,视觉效果模糊。若是在工业检测行业,对焦不准确,可能会造成严重后果;对焦准确的图像,其清晰度高,对比度鲜明,层次明显。

qq_37835727的博客 7113

NFC 安卓开发

毕设要做基于安卓NFC功能的门禁刷卡系统,于是有了此文。 第一关是搜集支持NFC功能的手机,本人要求是满足功能的情况下尽可能便宜。 先介绍下手机上的NFC功能,有三种模式(读卡模式,点对点模式,卡模式) NFC技术原理解析及应用参考设计集锦手机终端的NFC功能由NFC Controller、NFC协议栈、SE、SE访问API、SE访问控制及AP访问SE芯片构成,其主

drehing的博客 1160

树莓派与stm32通信超详细解答过程

笔者之前发过关于stm32与openmv通信的教程,在学习了几天opencv后,想实现树莓派4B与stm32进行通信。于是上网查询资料,最后实现了两者之间的通信,相信这对大多数电赛人都很有帮助,opencv的识别效果是远高于openmv以及K210的。在此我参考了以下资料辅助我学习,大家可以参考。基于树莓派4B与STM32的UART串口通信实验(代码开源)_树莓派4b串口波特率-优快云博客。

Halcyon0804的博客 5465

Android Studio安卓读写NFC Ntag标签源码

Android Studio安卓读写NFC Ntag标签源码,读取标签UID、签名信息、计数器、设置静态锁、设置标签密钥保护机制、轻松读取标签内数据、轻松写数据。

1714

Ubuntu 22.04下Minkowski Engine编译避坑指南:解决Cuda 12.2与Pytorch cu118版本冲突

本文详细介绍了在Ubuntu 22.04系统中解决Minkowski Engine编译时Cuda 12.2与Pytorch cu118版本冲突的实用方法。通过修改版本检查逻辑、创建兼容符号链接等技巧,帮助开发者顺利完成编译,并提供了性能优化建议和替代方案,确保三维点云处理任务的高效运行。

weixin_42543309的博客 161

【SerDes】美信GMSL2-CSI调试心得

美信GMSL2加解串器芯片家族广泛应用于车载和工业视觉系统。文章介绍了MAX96717/MAX96717F加串器和MAX96724/MAX96724R解串器的关键特性,包括支持MIPI CSI-2接口、6Gbps传输速率等功能。提供了基于高通平台的demo系统配置和调试步骤,重点阐述了Link Lock、PCLK检测和Video Lock等关键调试环节,并详细说明了像素模式,隧道模式的工作原理及寄存器配置示例。文中还包含通过I2C读写寄存器的具体操作指令,取流freeze可能原因和解决方法。

qq_38089448的博客 2490

安卓之Nfc的使用

NFC是Near Field Communication的缩写,也就是近场通信,是一种短距离数据传输技术,该功能相对于传统的蓝牙以及红外等数据传输功能各有利弊,是目前主流的近距离通信技术之一。NFC 提供了一种简单、触控式的解决方案,可以让手机用户简单直观地交换信息、访问内容与服务。 1、配置nfc的使用权限:<uses-permission android:name="android.permi

WQFAE01的博客 3565

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

weixin_72194028的博客 3008

nfc android 7.0 apk,分屏/NFC一卡通 一加3安卓7.0氢OS体验

【IT168 评测】谷歌在今年的8月份推出了全新的Android 7.0系统,各家手机厂商也抓紧了时间进行适配。作为一个较为少见的刷机也保修的手机厂商——一加,上周放出了适用于一加手机3的第六版公测系统,此次版本就是基于Android 7.0,这也是国内最早一批适配Android 7.0的系统之一。今天我们就来体验下吃上牛轧糖的一加手机3有哪些不同之处。之前已经升级氢OS 2.5公测版的朋友可以直...

weixin_39951929的博客 648

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android nfc 支付功能,用上安卓7.0 OnePlus 3开通NFC支付功能

OnePlus官方社区于近期发布了基于Android 7.0的OnePlus 3氢OS公测第六个版本,OnePlus 3用户可以手动升级到这个版本。早前曾经刷过氢OS 2.5公测版本的OnePlus 3用户也会收到OTA的推送。在这个氢OS公测第六版当中,支持分屏处理多任务,优化了氢视窗的编辑交互,并增加了不少个性化的设置,例如图标尺寸大小可调节,状态栏图标支持自定义等等。此外,在这个版本当中,N...

weixin_31096417的博客 326

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: Fragment实现左右新闻列表和详情
下一篇: Android RecyclerView
android_xiaogang
博客等级 码龄12年 89粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值