Android 15693协议去读NFC
时间: 2023-07-30 15:04:34 浏览: 249
Android系统中可以使用NFC功能读取15693协议的标签数据,需要使用Android的NFC框架API。具体实现步骤如下:
1. 在AndroidManifest.xml文件中添加NFC权限声明:
```
<uses-permission android:name="android.permission.NFC" />
```
2. 在需要使用NFC功能的Activity中注册NFC事件:
```
private NfcAdapter nfcAdapter;
private PendingIntent pendingIntent;
private IntentFilter[] intentFiltersArray;
private String[][] techListsArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取NFC适配器实例
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
// 创建PendingIntent对象,用于在标签靠近时启动Activity
pendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// 创建IntentFilter对象,用于过滤标签类型
IntentFilter ndefFilter = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
try {
ndefFilter.addDataType("*/*");
} catch (IntentFilter.MalformedMimeTypeException e) {
throw new RuntimeException("MalformedMimeTypeException", e);
}
intentFiltersArray = new IntentFilter[] { ndefFilter };
// 创建TechLists对象,用于过滤标签协议
techListsArray = new String[][] { { NfcV.class.getName() } };
}
@Override
protected void onResume() {
super.onResume();
if (nfcAdapter != null) {
// 启用前台调度系统
nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
}
}
@Override
protected void onPause() {
super.onPause();
if (nfcAdapter != null) {
// 停用前台调度系统
nfcAdapter.disableForegroundDispatch(this);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
// 获取标签对象
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
// 获取NfcV标签对象
NfcV nfcvTag = NfcV.get(tag);
if (nfcvTag != null) {
try {
// 连接NfcV标签
nfcvTag.connect();
byte[] cmd = new byte[] { (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x00 };
byte[] response = nfcvTag.transceive(cmd); // 发送读取命令
// 处理读取到的数据
// ...
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 断开NfcV标签连接
nfcvTag.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
```
在onNewIntent()方法中,可以使用NfcV类的connect()方法连接15693协议标签,并使用transceive()方法发送读取命令,获取标签数据。
阅读全文