安卓 nfc 广播调用 监听 完整的java代码
时间: 2024-09-07 17:01:54 浏览: 38
Android中的NFC(近场通信)功能通常通过BroadcastReceiver来监听NFC事件。以下是完整的Java代码示例,用于注册一个NFC BroadcastReceiver来接收NDEF消息:
```java
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
public class NfcListener extends BroadcastReceiver {
// 定义一个PendingIntent对象,用于启动Activity处理NFC数据
private PendingIntent.FLAG_ONE_SHOT = PendingIntent.FLAG_ONE_SHOT;
private PendingIntent intentToStartActivity;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(NfcAdapter.ACTION_NDEF_DISCOVERED)) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NdefReader reader = Ndef.get(tag);
if (reader != null) {
try {
// 读取NDEF消息
NdefMessage message = reader.readNdefMessage();
if (message != null) {
handleNdefMessage(context, message);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭NdefReader
if (reader != null) {
reader.close();
}
}
}
}
}
private void handleNdefMessage(Context context, NdefMessage message) {
// 解析并处理NDEF消息,例如创建一个新的Intent来显示消息内容
for (NdefRecord record : message.getRecords()) {
String mime = record.getMimeType();
byte[] payload = record.getPayload();
// 创建一个解析后的意图,并启动相应的Activity
Intent i = new Intent();
i.putExtra("ndef_message", payload);
i.setAction("your.package.YOUR_ACTIVITY_ACTION");
intentToStartActivity = PendingIntent.getActivity(context, 0, i, FLAG_ONE_SHOT);
}
// 如果有处理的Activity,启动它
if (intentToStartActivity != null) {
context.startActivities(new Intent[]{intentToStartActivity});
}
}
// 注册NFC广播接收器
public static void registerNfcListener(Context context) {
IntentFilter filter = new IntentFilter();
filter.addAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
context.registerReceiver(new NfcListener(), filter);
}
// 取消注册NFC广播接收器
public static void unregisterNfcListener(Context context) {
context.unregisterReceiver(NfcListener);
}
}
```
要在应用中使用这个监听器,你需要在AndroidManifest.xml文件中添加NFC权限,并在需要的地方调用`registerNfcListener()`。
阅读全文