安卓NFC读取卡号demo
时间: 2024-01-05 15:42:28 浏览: 130
以下是一个简单的安卓 NFC 读取卡号的示例代码:
首先,确保在 AndroidManifest.xml 文件中添加了以下权限:
```
<uses-permission android:name="android.permission.NFC" />
```
然后,在相应的 Activity 中添加以下代码:
```java
public class MainActivity extends Activity {
private NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取 NFC 适配器
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
Toast.makeText(this, "设备不支持 NFC", Toast.LENGTH_SHORT).show();
finish();
return;
}
// 检查 NFC 是否开启
if (!nfcAdapter.isEnabled()) {
Toast.makeText(this, "请在系统设置中先启用 NFC 功能", Toast.LENGTH_SHORT).show();
finish();
return;
}
// 创建 PendingIntent 对象,并在检测到卡片时调用 onNewIntent 方法
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
IntentFilter[] filters = new IntentFilter[]{filter};
nfcAdapter.enableForegroundDispatch(this, pendingIntent, filters, null);
}
@Override
protected void onResume() {
super.onResume();
// 检查 NFC 是否开启
if (nfcAdapter != null && !nfcAdapter.isEnabled()) {
Toast.makeText(this, "请在系统设置中先启用 NFC 功能", Toast.LENGTH_SHORT).show();
finish();
return;
}
}
@Override
protected void onPause() {
super.onPause();
// 关闭前台调度
if (nfcAdapter != null) {
nfcAdapter.disableForegroundDispatch(this);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String cardNumber = ByteArrayToHexString(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID));
Toast.makeText(this, "卡号: " + cardNumber, Toast.LENGTH_SHORT).show();
}
/**
* 将字节数组转换为十六进制字符串
* @param bytes 字节数组
* @return 十六进制字符串
*/
private String ByteArrayToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte aByte : bytes) {
String hex = Integer.toHexString(aByte & 0xFF);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex);
}
return sb.toString().toUpperCase();
}
}
```
在 AndroidManifest.xml 文件中,需要添加以下声明:
```xml
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
```
以上代码中,主要实现了以下功能:
1. 获取 NFC 适配器,并检查设备是否支持 NFC。
2. 检查 NFC 是否开启。
3. 创建 PendingIntent 对象,并在检测到卡片时调用 onNewIntent 方法。
4. 将字节数组转换为十六进制字符串,获取卡号并显示在 Toast 中。
实际使用时,还需要根据具体的需求进行修改和完善。
阅读全文