Android 11 完整代码实现NFC和读卡器连接

时间: 2024-02-05 10:02:33 浏览: 30
以下是一个简单的Android 11 NFC和读卡器连接的实现示例: 1. 添加NFC权限和NFC功能到AndroidManifest.xml文件中: ```xml <uses-permission android:name="android.permission.NFC" /> <uses-feature android:name="android.hardware.nfc" android:required="true"/> ``` 2. 在你的Activity中,创建一个NFC adapter对象: ```java NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); ``` 3. 确认读卡器连接: ```java if (nfcAdapter != null && nfcAdapter.isEnabled()) { Toast.makeText(this, "NFC is available", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "NFC is not available", Toast.LENGTH_LONG).show(); } ``` 4. 创建一个NFC读取intent: ```java private PendingIntent createPendingIntent() { Intent intent = new Intent(this, getClass()); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); return PendingIntent.getActivity(this, 0, intent, 0); } ``` 5. 处理NFC读取intent: ```java @Override protected void onResume() { super.onResume(); Intent intent = getIntent(); if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMessages != null) { NdefMessage[] messages = new NdefMessage[rawMessages.length]; for (int i = 0; i < rawMessages.length; i++) { messages[i] = (NdefMessage) rawMessages[i]; } if (messages.length > 0) { String message = new String(messages[0].getRecords()[0].getPayload()); Log.d(TAG, "NFC message received: " + message); } } } } ``` 6. 在onCreate()方法中启动NFC读取: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PendingIntent pendingIntent = createPendingIntent(); IntentFilter[] intentFilters = new IntentFilter[]{new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED)}; nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFilters, null); } ``` 7. 在onPause()方法中停止NFC读取: ```java @Override protected void onPause() { super.onPause(); nfcAdapter.disableForegroundDispatch(this); } ``` 8. 为了连接读卡器,你需要使用UsbManager和一个BroadcastReceiver: ```java private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; private UsbManager usbManager; private UsbDevice usbDevice; private final BroadcastReceiver usbBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); switch (action) { case ACTION_USB_PERMISSION: UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); boolean permissionGranted = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false); if (device != null && permissionGranted) { if (device.equals(usbDevice)) { // 连接读卡器 // ... } } break; } } }; ``` 9. 在onCreate()方法中初始化UsbManager和读卡器: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_USB_PERMISSION); registerReceiver(usbBroadcastReceiver, filter); // 查找和连接读卡器 findAndConnectUsbDevice(); } private void findAndConnectUsbDevice() { HashMap<String, UsbDevice> usbDevices = usbManager.getDeviceList(); if (!usbDevices.isEmpty()) { for (UsbDevice device : usbDevices.values()) { if (isSupported(device)) { PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); usbManager.requestPermission(device, permissionIntent); usbDevice = device; break; } } } } private boolean isSupported(UsbDevice device) { // 检查设备是否支持读卡器的VID和PID // ... return true; } ``` 10. 在onDestroy()方法中,注销BroadcastReceiver: ```java @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(usbBroadcastReceiver); } ``` 这个示例可以帮助你开始使用NFC和读卡器连接,但具体实现还需要根据你的需求进行调整和拓展。

相关推荐

最新推荐

recommend-type

Android实现读取NFC卡卡号示例

本篇文章主要介绍了Android实现读取NFC卡卡号示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

基于Android平台NFC手机读卡器的设计与实现

射频识别(RFID)技术是一项利用射频信号通过空间耦合(交变磁场或电场)实现无接触信息传递并通过所传递的信息达到识别目的的技术
recommend-type

ST25R NFC 读卡器 开发流程与设计资源.pdf

ST25R NFC 读卡器 开发流程与设计资源.pdf 官网可凭金币免费下载
recommend-type

Android 使用手机NFC的读取NFC标签数据的方法

主要介绍了Android 使用手机NFC的读取NFC标签数据的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

实现NFC手机做门禁卡的方法

基础条件:门禁刷卡器能识别NFC手机(卡模拟状态下的CPU卡)。 验证办法:打开手机的NFC,在门禁刷卡器上刷一下,门禁刷卡器有反应就行(响一声),那么就满足了基础条件。如果门禁刷卡器没反应,那就不需要考虑了,...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。