基础
nfc:近距离无线通信(Near Field Communication),距离一般要小于4cm。android设备(需要支持nfc技术)和nfc设备(文档中称为tag)进行少量的数据交换。
权限及feature配置
需要nfc权限,如下:
<uses-permission android:name="android.permission.NFC"/>
也可以配置uses-feature。但,如果Nfc并不是app的主要功能,不建议在清单文件中配置。
<uses-feature android:name="android.hardware.nfc" android:required="true" />
如果没有配置<uses-feature>可能导致不支持nfc功能的android设备安装上了该应用。可以使用如下代码进行检测判断
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
if (adapter == null)
Toast.makeText(MainActivity.this, "nfc不支持", Toast.LENGTH_SHORT).show();
if (adapter != null && !adapter.isEnabled()) {
Toast.makeText(MainActivity.this, "nfc未打开", Toast.LENGTH_SHORT).show();
}
action的配置
当android设备扫描到有nfc设备时(未锁屏状态下,android设备会不停地扫描nfc设备,除非用户在手机设置中关闭了nfc功能),系统会发送一个intent。因此,为了获取到该intent, 需要在相应的activity配置中加上<intent-filter>。该intent一共有以下三个action:
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<action android:name="android.nfc.action.TAG_DISCOVERED" />
三个action的匹配顺序如下:
NDEF_DISCOVERED
当nfc设备(tag)中存储的数据为ndef格式并且系统可以识别数据的类型(MIME Type或者 URI)时,intent的action为该值。如:匹配纯文本
<intent-filter>
<action android:name="and