Android开发文档学习:NFC(近场通讯)(二)

Android NFC API概述

Android中提供的与NFC相关的较高层的类都包含在android.nfc中,这个包中包含了用于与本地NFC适配器交互的类,用于代表已经识别的标签的类以及用来使用NDEF(Nfc Data Exchange Format )格式的类。

这个包中主要包括了如下几个类:

Show entries
Search:
类名描述
NfcManagerNFC的一个高级管理类,用于枚举出本机的NFC适配器。由于大多数的设备都只提供一个NFC适配器,因此在大多数情况下我们可以通过getDefaultAdapter(Context)这个静态的方法来得到本地的NFC适配器的引用。
NfcAdapter该类代表了本地的NFC适配器。它定义了如何将NFC标签的信息传达给Activity的intent,并且提供了用于注册前台标签调度和前台的数据推送的方法。前台的基于NDEF的数据推送是目前Android仅提供的点到点支持方式。
NdefMessage and NdefRecordNDEF是由NFC论坛所定义的一种数据结构,它是为了高效率的在NFC标签上存储数据,例如文本、url或者其他的数据格式。NdefMessage是用于封装需要传输或读取的数据的容器。而每一个NdefMessage包含了0个或若干个NdefRecord。每个NDEF的记录都包括一种有效类型的数据。在一条NDEF消息中的第一个记录的作用是向android的Activity调度一个标签。
Tag该类代表了一个无源的NFC标签。这种标签可以来自于各种物体,比如通常所用的物理标签、卡片、钥匙卡或者也可以是一部可以仿真成NFC标签的电话机。当NFC识别设备发现了一个NFC标签,系统就会创建一个NFC Tag对象并在对象中封装一个intent。然后NFC的标签调度系统将会负责将这些intent调度到适当的Activity中。可以通过 getTechList() 方法来决定使用适合该Tag对象的读写标准并且可以使用 android.nfc.tech包所提供的相关类来创建与此相关的 TagTechnology 对象。
Showing 1 to 4 of 4 entries

 

Android.nfc.tech包主要是包括了一些用于查询特定标签的特性和I/O操作的类。所有的这些类都需要实现TagTechnology接口,它们包括NfcA、NfcB、NfcF、NfcV、IsoDep、Ndef、NdefFormtable、MifareClassic、MifareUltralight这几个类。

Android与NFC相关的类大致就是如上几个,下面我们简单的了解一下如何开始NFC的编程。

根据Android系统所遵循的权限机制,我们需要在AndroidManifest.xml中对需要使用的权限进行声明,这样在程序进行安装时将会提示用户该程序将会使用到哪些设备,让用户来决定是否赋予应用程序相应的权限,Android通过这样的机制来提高系统的安全性。因此当我们在应用程序中需要使用到NFC硬件的时候,我们应当在AndroidManifest.xml中加上:

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

另外还需要声明的是能够支持应用程序的最低SDK版本,由于对NFC的支持是在API 10以后才比较完善,因此我们需要使用:

1
< uses-sdk android:minSdkVersion = "10" />

android的应用程序都是通过上传到Android Market上供用户下载的,我们可以通过加入如下一段声明使我们的应用程序能够被归类到“支持NFC”的手机型号中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< uses-feature android:name = "android.hardware.nfc" android:required = "true" />1
< p style = "text-indent: 2em;" >最后,我们可以通过声明一些intent filter来告诉操作系统该Activity可以处理NFC数据,有三种声明的方式:
1        < intent-filter >
       < action android:name = "android.nfc.action.NDEF_DISCOVERED" />
       < data android:mimeType = "mime/type" />
     </ intent-filter >
 
         < intent-filter >
       < action android:name = "android.nfc.action.TECH_DISCOVERED" />
       < meta-data android:name = "android.nfc.action.TECH_DISCOVERED"
            android:resource = "@xml/nfc_tech_filter.xml" />
     </ intent-filter >
 
     < intent-filter >
       < action android:name = "android.nfc.action.TAG_DISCOVERED" />
     </ intent-filter >

这三种intent filter的声明方式使用在特定的情况下。因此我们需要通过分析具体的应用程序来决定使用哪一种方式。具体怎么选择将在后面提到(标签调度系统)。

这里我们可以看一看一个完整的AndroidManifest.xml例子,取自于NFCDemo。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<? xml version = "1.0" encoding = "utf-8" ?>
< manifest xmlns:android = "http://schemas.android.com/apk/res/android"
     package = "com.example.android.nfc"
>
     < uses-permission android:name = "android.permission.NFC" />
     < uses-permission android:name = "android.permission.CALL_PHONE" />
     < application
         android:icon = "@drawable/icon"
         android:label = "@string/app_name"
     >
     < activity android:name = ".simulator.FakeTagsActivity"
         android:theme = "@android:style/Theme.NoTitleBar" >
         < intent-filter >
             < action android:name = "android.intent.action.MAIN" />
             < category android:name = "android.intent.category.LAUNCHER" />
         </ intent-filter >
     </ activity >
         < activity android:name = "TagViewer"
             android:theme = "@android:style/Theme.NoTitleBar"
         >
             < intent-filter >
                 < action android:name = "android.nfc.action.TAG_DISCOVERED" />
                 < category android:name = "android.intent.category.DEFAULT" />
             </ intent-filter >
         </ activity >
     </ application >
     < uses-sdk android:minSdkVersion = "9" />
     < uses-feature android:name = "android.hardware.nfc" android:required = "true" />
</ manifest >

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值