Android11 如何接收全部的APDU命令
时间: 2023-08-18 07:09:20 浏览: 76
在 Android 11 中,你可以使用 `ReaderMode` API 来接收所有的 APDU 命令。这个 API 可以让你在不需要实现 `HostApduService` 的情况下,直接接收 NFC 读卡器发送的 APDU 命令。
以下是一个简单的示例代码:
```
public class MyNfcReader implements NfcAdapter.ReaderCallback {
private NfcAdapter nfcAdapter;
public MyNfcReader(NfcAdapter nfcAdapter) {
this.nfcAdapter = nfcAdapter;
}
public void start() {
Bundle options = new Bundle();
options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, 5000); // 设置超时时间
nfcAdapter.enableReaderMode(activity, this, NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK, options);
}
public void stop() {
nfcAdapter.disableReaderMode(activity);
}
@Override
public void onTagDiscovered(Tag tag) {
IsoDep isoDep = IsoDep.get(tag);
if (isoDep != null) {
try {
isoDep.connect();
byte[] response = isoDep.transceive(command);
// 处理响应
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
isoDep.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
```
在这个示例代码中,我们创建了一个 `MyNfcReader` 类来实现 `NfcAdapter.ReaderCallback` 接口。在 `start` 方法中,我们启用了 `ReaderMode` 并传递了 `options` 参数来设置超时时间和其他选项。在 `onTagDiscovered` 方法中,我们处理 APDU 命令并返回响应。在 `stop` 方法中,我们停用了 `ReaderMode`。
注意,你需要在 AndroidManifest.xml 文件中声明 NFC 权限:
```
<uses-permission android:name="android.permission.NFC" />
```
另外,由于 `ReaderMode` 是一个异步 API,你需要在 UI 线程之外执行它,例如在一个单独的线程或使用 `AsyncTask`。