Android循环读取NFC的tagID
时间: 2023-10-25 16:14:46 浏览: 166
你可以使用 Android 的 NFC 库来实现循环读取 NFC 标签 ID 的功能。以下是一个简单的示例代码,可以帮助你入门:
```java
public class MainActivity extends AppCompatActivity {
private NfcAdapter nfcAdapter;
private PendingIntent pendingIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取 NFC 适配器
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
// 创建 PendingIntent 对象
Intent intent = new Intent(this, getClass());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
}
@Override
protected void onResume() {
super.onResume();
// 开始前台调度系统
nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null);
}
@Override
protected void onPause() {
super.onPause();
// 停止前台调度系统
nfcAdapter.disableForegroundDispatch(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 处理 NFC 标签
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
byte[] tagId = tag.getId();
String tagIdHex = byteArrayToHexString(tagId);
Log.d("NFC", "Tag ID: " + tagIdHex);
}
}
private String byteArrayToHexString(byte[] array) {
StringBuilder sb = new StringBuilder();
for (byte b : array) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
}
}
```
这段代码中,我们在 `onResume` 方法中启用了前台调度系统,这意味着当你的应用程序在前台运行时,它将拦截所有 NFC 意图。在 `onPause` 方法中停止前台调度系统,以确保在应用程序不在前台时不会拦截 NFC 意图。
在 `onNewIntent` 方法中,我们检查接收到的意图是否包含一个 `Tag` 对象,并从中提取标签 ID。这个方法会在每次检测到 NFC 标签时被调用。
最后,`byteArrayToHexString` 方法将字节数组转换为十六进制字符串,方便输出到日志中。
阅读全文