赛派号

安卓手机nfc功能在哪里开 Android中的NFC操作

目录

1.申请权限

2.设置意图过滤器

3.判断NFC功能是否可用(NfcAdapter)

4.NFC感应(NfcAdapter)启用与禁用

5.NFC数据解码

6.案例代码一览

NFC的全称是“Near Field Communication”,意思是近场通信、与邻近的区域通信。该功能由NfcAdapter(NFC适配器)控制。

1.申请权限 2.设置意图过滤器

在清单文件(AndroidManifests)中为Activity设置意图过滤器(IntentFilter);在程序检测到NFC操作时将跳转至该界面。

本部分操作用于从外部直接打开指定Activity。

android.nfc.action.NDEF_DISCOVERED:指定了当应用程序收到包含NDEF(NFC Data Exchange Format)数据的NFC标签时应该触发的动作。NDEF是一种用于在NFC设备之间交换信息的标准格式。android.nfc.action.TAG_DISCOVERED:定义了当检测到NFC标签时应该触发的动作。这个动作用于处理未包含NDEF数据的NFC标签。android.nfc.action.TECH_DISCOVERED:指定了当检测到支持的NFC技术时应该触发的动作。这允许应用程序处理特定的NFC技术。其中具体的NFC技术由meta-data标签指定源文件。 android.nfc.tech.NfcA android.nfc.tech.NfcB android.nfc.tech.NfcF android.nfc.tech.NfcV android.nfc.tech.IsoDep android.nfc.tech.Ndef android.nfc.tech.NdefFormatable android.nfc.tech.MifareClassic android.nfc.tech.MifareUltralight 3.判断NFC功能是否可用(NfcAdapter)

可使用NfcAdapter(NFC适配器)进行判断,未开启时跳转至NFC设置界面;NfcAdapter常用方法如下:

getDefaultAdapter(静态方法):获取NFC适配器对象;设备无NFC功能时返回null。isEnabled:判断NFC功能是否可用(即是否开启)。enableForegroundDispatch:用于启用NFC感应;第一个参数为上下文环境,第三参数为用于触发的待定意图,第三个参数为过滤器(会触发待定意图的NFC事件类型),第四个参数为指定NFC技术类型的二维数组。disableForegroundDispatch:用于禁用NFC感应。 //获取NFC适配器 NfcAdapter nfcAdapter=NfcAdapter.getDefaultAdapter(MainActivity.this); //判断设备是否有NFC功能 if(nfcAdapter==null){ textView.setText("设备无NFC功能"); } //判断设备是否开启NFC功能 else if (!nfcAdapter.isEnabled()) { textView.setText("设备未开启NFC功能"); //跳转至设置NFC界面 Intent intent=new Intent(Settings.ACTION_NFC_SETTINGS); startActivity(intent); } else { textView.setText("设备已开启NFC功能"); } 4.NFC感应(NfcAdapter)启用与禁用

建议在页面暂停时禁用NFC感应,在页面运行时启用NFC感应。

用于触发的待定意图(PendingIntent)为读取NFC信息通常为跳转至当前界面(即会触发onNewIntent方法);请注意需将Activity设置为仅有一个,可在清单文件将launchMode设置为singleTop,或为Intent使用.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)。

//准备NFC感应启动参数 //用于触发的待定意图 Intent intent=new Intent(MainActivity.this,MainActivity.class); //intent=intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this,12345,intent,PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_IMMUTABLE); //过滤器数组(会触发待定意图的NFC事件类型) IntentFilter[] intentFilter=new IntentFilter[]{new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED)}; //指定NFC技术类型的二维数组 String[][] techList=new String[][]{new String[]{NfcA.class.getName()},{IsoDep.class.getName()}}; protected void onResume() { super.onResume(); if(nfcAdapter!=null&&nfcAdapter.isEnabled()){ //启用NFC感应 nfcAdapter.enableForegroundDispatch(MainActivity.this,pendingIntent,intentFilter,techList); } } protected void onPause() { super.onPause(); if(nfcAdapter!=null&&nfcAdapter.isEnabled()){ //禁用NFC感应 nfcAdapter.disableForegroundDispatch(MainActivity.this); } } 5.NFC数据解码

用于触发的待定意图(PendingIntent)为读取NFC信息通常为跳转至当前界面(即会触发onNewIntent方法);请注意需将Activity设置为仅有一个。

可以通过重写onNewIntent方法,获取NFC数据并解码:

使用Intent获取action并判断是否为NFC操作触发;action返回结果可能为null;可无此步使用Intent获取其中包含的Tag型数据;可使用Tag数据获取卡序列号( getId()方法 );tag返回结果可能为null使用Tag数据获取MifareClassic对象MifareClassic对象连接到NFC卡根据MifareClassic对象获取卡中数据关闭MifareClassic与卡的连接,无论是否出现异常

MifareClassic类常用方法:

get(静态方法):从Tag对象中获取卡片对象的信息。connet:连接卡片数据。close:释放卡片数据。getType:获取卡片类型。TYPE_CLASSIC表示传统型,TYPE_PLUS表示加强型,TYPE_PRO表示专业型。getSectorCount:获取扇形区域。getBlockCount:获取分块个数。getSize:获取存储大小,单位字节。 protected void onNewIntent(Intent intent) { super.onNewIntent(intent); //读取NFC信息 Tag tag=intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); if(tag!=null){ //获取序列号 byte[] id_bytes=tag.getId(); String id=""; for(int i=0;i

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lsinopec@gmail.com举报,一经查实,本站将立刻删除。

上一篇 没有了

下一篇没有了