把广播部分的代码写完整
时间: 2024-04-25 16:27:10 浏览: 162
STM32-LORA 广播传输 双机通讯源代码
好的,下面是完整的广播部分代码:
```java
public class NfcReaderActivity extends AppCompatActivity {
private NfcAdapter mNfcAdapter;
private PendingIntent mPendingIntent;
private IntentFilter[] mFilters;
private String[][] mTechLists;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nfc_reader);
// 获取系统的 NFC 适配器实例
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
// 创建 PendingIntent 对象,用于处理 NFC 标签的读取事件
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// 创建 IntentFilter 数组,用于过滤 NFC 标签的读取事件
mFilters = new IntentFilter[] { new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED) };
// 创建 tech lists 数组,用于指定要响应的标签类型
mTechLists = new String[][] { new String[] { NfcV.class.getName() } };
}
@Override
protected void onResume() {
super.onResume();
// 开始监听 NFC 事件
mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists);
}
@Override
protected void onPause() {
super.onPause();
// 停止监听 NFC 事件
mNfcAdapter.disableForegroundDispatch(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 获取当前检测到的 NFC 标签的 Tag 对象
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
// 在这里进行读取标签数据的操作
try {
byte[] blockData = readBlock(tag, 1);
// 处理读取到的数据
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static byte[] readBlock(Tag tag, int blockNumber) throws IOException {
// 获取 NfcV 实例
NfcV nfcv = NfcV.get(tag);
nfcv.connect();
// 构造读取命令
byte[] readCmd = new byte[] { (byte) 0x20, (byte) 0x20, (byte) blockNumber };
byte[] data = nfcv.transceive(readCmd);
// 关闭连接
nfcv.close();
// 处理读取结果
if (data != null && data.length >= 1 && data[0] == 0x00) {
byte[] blockData = new byte[4];
System.arraycopy(data, 1, blockData, 0, 4);
return blockData;
} else {
throw new IOException("读取块失败");
}
}
}
```
在该代码中,我们创建了一个 PendingIntent 对象,并在 `onResume()` 方法中通过 `mNfcAdapter.enableForegroundDispatch()` 方法开始监听 NFC 事件。这样,在检测到 NFC 标签靠近手机时,系统会发送一个广播,开发者可以通过 `onNewIntent()` 方法获取到该广播,并从中获取到当前检测到的 NFC 标签的 Tag 对象。然后,可以调用 `readBlock()` 方法来读取标签数据。注意,在读取标签数据之前,需要先调用 `nfcv.connect()` 方法建立连接,读取数据之后再调用 `nfcv.close()` 方法关闭连接。
阅读全文