Android读取手机的NFC卡
介绍
近年来,随着移动支付和智能门禁系统的普及,NFC(Near Field Communication)技术也越来越受到关注。NFC技术可以实现手机与智能卡之间的无线通信,并且具有安全性高、传输速度快、操作简便等优点。在Android系统中,我们可以利用系统提供的API来读取手机上的NFC卡,并进行相应的操作。本文将介绍如何在Android平台上读取手机的NFC卡,并附带相应的代码示例。
准备工作
在开始之前,我们需要确保手机的硬件支持NFC功能,并且手机系统的版本在Android 4.0以上。另外,我们还需要在AndroidManifest.xml文件中添加相应的权限和过滤器,以便让应用程序能够正常地与NFC交互。
<uses-permission android:name="android.permission.NFC" />
<application ...>
...
<activity ...>
...
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
...
</application>
上述代码中,android.permission.NFC
权限用于允许应用程序访问NFC功能。<intent-filter>
和<meta-data>
用于告诉系统,当手机靠近NFC卡时,由我们的应用程序来处理相应的事件。
读取NFC卡
在Android中,我们可以通过NfcAdapter
类来获取NFC适配器,并注册相应的回调方法来处理NFC事件。下面是一个简单的示例代码:
public class MainActivity extends AppCompatActivity {
private NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
// 设备不支持NFC
Toast.makeText(this, "设备不支持NFC", Toast.LENGTH_SHORT).show();
finish();
return;
}
// 检查NFC是否已启用
if (!nfcAdapter.isEnabled()) {
Toast.makeText(this, "请在系统设置中启用NFC功能", Toast.LENGTH_SHORT).show();
finish();
return;
}
// 设置NFC事件的处理回调
nfcAdapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() {
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
// TODO: 构建要推送的NDEF消息
return null;
}
}, this);
}
@Override
protected void onResume() {
super.onResume();
Intent intent = new Intent(this, getClass());
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null);
}
@Override
protected void onPause() {
super.onPause();
nfcAdapter.disableForegroundDispatch(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 处理新的NFC事件
resolveIntent(intent);
}
private void resolveIntent(Intent intent) {
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
// 读取到NFC卡信息
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
// TODO: 处理NFC卡信息
}
}
}
}
上述代码中,onCreate()
方法中首先获取到默认的NFC适配器,并检查设备是否支持NFC。然后,通过nfcAdapter.isEnabled()
方法来检查NFC功能是否已启用。接下来,在setNdefPushMessageCallback()
方法中设置了一个CreateNdefMessageCallback
回调,用于构建要推送的NDEF消息。当手机靠近另一台支持NFC的设备时,将触发该回调。
在onResume()
方法中,我们通过enableForegroundDispatch()
方法启用前台调度,以便在应用程序处于前台运行时能够正