安卓 nfc 监听 完整的java代码 以及调用
时间: 2024-09-06 08:07:31 浏览: 49
Android NFC监听通常涉及到`android.nfc.NfcAdapter`和相关的活动和服务。以下是一个简单的完整的Java代码示例,用于检测NFC标签并处理读取事件:
```java
// 首先,在AndroidManifest.xml文件中启用NFC权限
<uses-feature android:name="android.hardware.nfc" android:required="true"/>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
// 接下来在Activity中设置NFC监听
public class NfcActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback {
private NfcAdapter mNfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nfc);
// 获取NfcAdapter实例
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (mNfcAdapter != null && !mNfcAdapter.isEnabled()) {
// 如果NFC未开启,提示用户打开
Toast.makeText(this, "NFC is not enabled", Toast.LENGTH_SHORT).show();
finish();
return;
}
// 设置ReaderCallback
mNfcAdapter.enableReaderMode(this, this, NdefMessage.class.getName(), null);
}
@Override
public void onNdefPushReceived(NdefMessage message) {
handleNdefMessage(message);
}
private void handleNdefMessage(NdefMessage message) {
for (NdefRecord record : message.getRecords()) {
// 解析NDEF记录,例如URI、文本等数据
String text = NdefUtil.getText(record);
Log.d("NFC Data", "Read: " + text);
// 这里可以根据需要对数据做进一步操作,如跳转到相应页面
startIntentFromUri(text);
}
}
// 其他辅助方法
private void startIntentFromUri(String uriText) {
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.parse(uriText);
try {
intent.setData(data);
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "No app found to handle the URI", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onntagDetected(Tag tag) {
// 当发现新的NFC标签时触发,可以在此处添加相应的处理逻辑
Toast.makeText(this, "Tag detected: " + tag.getId(), Toast.LENGTH_SHORT).show();
}
// ...其他回调方法
@Override
protected void onPause() {
super.onPause();
// 关闭NFC监听以节省电池
mNfcAdapter.disableReaderMode(this);
}
}
```
阅读全文