nfc 安卓 监听代码
时间: 2024-09-06 16:00:59 浏览: 40
安卓开发-读取NFC标签内容
NFC (近场通信) 是一种短距离无线通信技术,常用于移动设备之间交换数据。在Android上监听NFC事件,你需要使用`android.nfc`包下的API。以下是一个简单的示例,展示如何开启NFC并注册一个回调来处理NFC标签的读取:
```java
// 首先,在AndroidManifest.xml文件中添加权限声明
<uses-permission android:name="android.permission.NFC" />
// 在MainActivity.java中实现
import android.app.PendingIntent;
import android.content.Intent;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
public class MainActivity extends AppCompatActivity {
private NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化NfcAdapter
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
// NFC功能不可用
return;
}
// 开启NFC
Intent intent = new Intent(NfcAdapter.ACTION_NDEF_DISCOVERED);
intent.setClass(this, MainActivity.class);
intent.putExtra(NfcAdapter.EXTRA_NDEF_MESSAGES, new NdefMessage[]{createBeaconMessage()}); // 自定义消息
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null); // 使用PendingIntent
}
// 创建一个NDEF消息,包含自定义的数据
private NdefMessage createBeaconMessage() {
String beaconText = "Your custom message";
byte[] txtBytes = beaconText.getBytes(Charset.forName("UTF-8"));
NdefRecord record = NdefRecord.createMime("text/plain", "", "text/plain;charset=UTF-8", txtBytes);
NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
return msg;
}
// 当接收到NFC标签时的回调函数
@Override
public void onNewIntent(Intent intent) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
handleTag(tag);
}
}
private void handleTag(Tag tag) {
// 这里可以解析NdefMessage获取数据,并进行相应的操作
// 比如,检查message是否是你创建的,然后做相应业务处理
NdefMessage receivedMessage = Ndef.getMessagesFromTag(tag).get(0);
for (NdefRecord r : receivedMessage.getRecords()) {
if (r.getType().equals("text/plain")) {
String data = new String(r.getPayload(), Charsets.UTF_8);
// 打印或者存储数据
Log.d("NFC", "Received message: " + data);
}
}
}
}
```
在这个示例中,当手机检测到NFC标签时,会触发`onNewIntent()`方法,你可以在这里解析并处理数据。注意这只是一个基本的框架,实际应用中可能需要更复杂的错误处理和数据解析。
阅读全文