Android NFC API 简述

来源:互联网 发布:kali linux 切换中文 编辑:程序博客网 时间:2024/04/26 07:46

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一,在android9之后开始有了NFC API。</span>

NdefRecord类,这是一个记录类,NdefMessage是Ndef类型的Message,里面封装了多个NdefRecord。类中有多个相关的函数操作。


二,1,使用NFC API第一步,在Android Manifest 中设置
(1)在<uses-permission>元素中生明访问NFC硬件的权限
<uses-permission android:name="android.permission.NFC" />


(2)确定程序支持的最小SDK版本。稍微能方便开发,流行广,适应性强的最起码叶的是10
<uses-sdkandroid:minSdkVersion="10" />


(3)限制apk。谷歌市场上可以限制没有相关硬件的手机下载。
<uses-featureandroid:name="android.hardware.nfc"android:required="true" />
2,第二部,NfcAdapter的获取
NfcAdapter意为为NFC适配器,常用NfcAdapter getDefaultAdapter来获取默认的nfc适配器。


三,调度系统
1,NFC前台调度系统
书上说,实现 一些设计需要在前台呈现的页面中直接获取或推送NFC信息。嗯,那就是说,我扫了一个标签,跳到一个activity中进行处理,跳到其它activity等,然后再扫,就继续回到activity中处理,而不用重新打开app。是不是说嫂标签的时候那个activity要说明,先跳到扫的界面,然后再真扫,就直接除了,就是说告诉app我要扫了,那个标签过来。程序主动。
2,NFC标签调度系统
在非锁屏,相关设备开启时,扫到标签就开始寻找启动应用程序。
流程:
解析NFC标签并搞清楚标签中表示数据负载的MIME类型或URI,
把MIME类型或URI以及数据负载封装到一个Intent中
基于Intent来启动Activity。
3,区别
借助网友问题:紧急求大神帮解决个问题:一个app中,在可以扫描标签的activity中,扫描标签,调到另一个activity来显示一些信息。这时再扫描标签,手机重新打开这个app!希望是关闭当前activity,回到上一activity,再进行扫标签
那要有一个activity负责读标签,然后手动回到那个标签,在进行扫描,由于读标签的activity处理Intent的优先级比其他的高,所以就不用退出app了。NFC前台调度系统就是app起主导作用,在app界面主动扫描,并拦截Intent。标签调度系统就是标签主导,在非锁屏状态下nfc适配器扫描到nfc标签时,寻找对应的应用程序,这样就得重新启动app了。而NFC前台调度型是定制activity拦截Intent。
4,NFC标签类型
标签调度系统顶以三种Intent对象,我感觉NDEF比较好,很通用
ACTION_NDEF_DISCOVERED,  ACTION_TECH_DISCOVERED,  ACTION_TAB_DISCOVERED

四,NFC Intent过滤器
NDEF差不多有uri,text,absolute_uri, external, mime_media 四个小类型,
我们这个东西用text就行了。


五,AAR,
android application record.从android4.0开始引入(api14)。
作用,扫描到的标签只是想让固定的程序打开。这通过Intent是无法实现的。而且当这个程序不存在是的时候,会自动从google play上面下载。
与Intent区别:
AAR在应用程序级别,Intent在activity级别。AAR只能有一个,Intent可以有多个对应。AAR还可以从google play上面下载应用。AAR在安卓4.0才有,Intent从2.2就有了。
使用很简单,在Ndefmessage中的最后加上一个AAR 记录就好了

String packageName = "com.duola.nfc";//package nameNdefMessage msg = new NdefMessage( new NdefRecord[]{ record1, record2,....... NdefRecord.createApplicationRecord(packageName) });


0 0