最近整理接手项目代码,其中有用到 NFC 功能,今天抽了个时间了解了一下,简单使用应该不难,高级扩展我就不知道喽,下面小结一番!
知识了解
网上看到一篇博客介绍 NFC 功能的,分了理论篇和实践篇,理论篇就是大致了解一下 NFC 这个功能,我看了觉得有了挺详细的概念,但是他那篇文章写的有点乱,后面看了下官方文档,发现官方文档也不错,而且有中文版,其实也是该先看官方文档:
https://developer.android.google.cn/guide/topics/connectivity/nfc
下面是参考的那篇博客:
东西太多了,其实我们只要掌握如何使用就可以的,下面讲解,有两种方式。
前台使用
1、配置权限
配置AndroidMenifest.xml:
<!--NFC权限-->
<uses-permission android:name="android.permission.NFC" />
<!-- 要求当前设备必须要有NFC芯片 -->
<uses-feature android:name="android.hardware.nfc" android:required="true" />
2、获取 NfcAdapter 对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate();
mNfcAdapter= NfcAdapter.getDefaultAdapter(this);//设备的NfcAdapter对象
if(mNfcAdapter==null){
//判断设备是否支持NFC功能
Toast.makeText(this,"设备不支持NFC功能!",Toast.LENGTH_SHORT);
finish();
return;
}
if (!mNfcAdapter.isEnabled()){
//判断设备NFC功能是否打开
Toast.makeText(this,"请到系统设置中打开NFC功能!",Toast.LENGTH_SHORT);
finish();
return;
}
mPendingIntent=PendingIntent.getActivity(this,0,new Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),0);//创建PendingIntent对象,当检测到一个Tag标签就会执行此Intent,设置 SINGLE_TOP 标志,只打开当前活动
}
这里还是在 onCreate 中写吧!
3、开启/关闭前台发布系统
//页面获取焦点
@Override
protected void onResume() {
super.onResume();
if (mNfcAdapter!=null){
mNfcAdapter.enableForegroundDispatch(this,mPendingIntent,null,null);//打开前台发布系统,使页面优于其它nfc处理.当检测到一个Tag标签就会执行mPendingItent
}
}
//页面失去焦点
@Override
protected void onPause() {
super.onPause();
if(mNfcAdapter!=null){
mNfcAdapter.disableForegroundDispatch(this);//关闭前台发布系统
}
}
只在当前页面显示的时候使用 NFC,是很合理的。
4、获取 TAG 对象
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
mTag=intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)