NFC读卡功能简单使用介绍

manifest配置:权限配置,nfc要求,最小sdk

您的应用支持的最低 SDK 版本。API 级别 9 仅通过 ACTION_TAG_DISCOVERED 支持有限的标签调度,并且只能通过 EXTRA_NDEF_MESSAGES extra 提供对 NDEF 消息的访问权限。无法访问其他任何标签属性或 I/O 操作。API 级别 10 提供全面的读取器/写入器支持以及前台 NDEF 推送功能;API 级别 14 则提供了一种更简便的方式(即,使用 Android Beam 将 NDEF 消息推送到其他设备),同时提供了用于创建 NDEF 记录的其他便捷方法。

<uses-sdk android:minSdkVersion="10"/>
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<uses-permission android:name="android.permission.NFC" />

NfcAdapter对象获取

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);

判断设备是否支持NFC 和判断NFC功能是否打开

if (nfcAdapter == null) {
            //设备不支持NFC
        }
        
//NFC 功能是否打开,没打开可以弹框提示,跳转到设置中的NFC开关界面       
nfcAdapter.isEnabled()     
        

读取卡片的方法

在manifest中设置Activity的 intent-filter的action等过滤规则,在android系统识别到NFC标签后跳转到Activity。这种方法可能会出现多个应用的APP提供了nfc功能需要用户选择,用户选择Activity操作又容易离开NFC标签,很不方便。使用前台调度系统,这个优先级比intent-filter高

  • Activity设置过滤

官网参考

action优先级:
image

  • enableForegroundDispatch使用前台调度系统
 PendingIntent pi= PendingIntent.getActivity(this, 0, new Intent(this,
                getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
 IntentFilter[]  mFilters = new IntentFilter[]{new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED),
                new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED)};
 String[][]  mTechLists = new String[][]{
                new String[]{IsoDep.class.getName()},
                new String[]{NfcA.class.getName()},
                new String[]{NfcB.class.getName()},
                new String[]{NfcF.class.getName()},
                new String[]{NfcV.class.getName()}};
          
 // onResume     
 nfcAdapter.enableForegroundDispatch(this, pi, mFilters, mTechLists);
 // onPause
 nfcAdapter.disableForegroundDispatch(this);
 @Override
protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
       Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
 }
  • Android 4.4更新了NFC的读卡器模式 enableReaderMode

NFC 读取器模式
新的 NFC 读取器模式允许 Activity 将所有 NFC Activity 限制为在前台时仅读取 Activity 感兴趣的标记类型。您可以使用 enableReaderMode() 为您的 Activity 启用读取器模式,提供一个 NfcAdapter.ReaderCallback 的实现,用于在检测到新的标记时接收回调。


private static final int READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A
            | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK | NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS;
NfcAdapter.ReaderCallback mReaderCallback = new NfcAdapter.ReaderCallback() {
        @Override
        public void onTagDiscovered(Tag tag) {
            Log.d(TAG, "onTagDiscovered: " + Arrays.toString(tag.getTechList()));
        }
    };
 //  onResume
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    nfcAdapter.enableReaderMode(this, mReaderCallback, READER_FLAGS, null);
            
    }
 //  onPause
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    nfcAdapter.disableReaderMode(this);
            
    }   
    

Google 官网NFC文档

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值