我正在使用NFC读取Mifare Classic 1K卡。
该代码适用于所有Android5.0及以下版本的Android设备,但当我在Android5.1设备上测试代码时,它不起作用。
我的代码,
MifareClassic mfc = MifareClassic.get(tagFromIntent);
当我在Android5.1中扫描卡片时,返回null
,否则在5.1以下的版本中,它可以正常工作。
@SuppressLint("InlinedApi")
public String AuthenticateCard(Context context, Intent nfcIntent) {
String blockData = null;
//Get an instance of the TAG from the NfcAdapter
Tag tagFromIntent = nfcIntent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String idFromIntent = ByteArrayToHexString(tagFromIntent.getId());
Log.v("onNewIntent()", "NfcAdapter TAG : " + tagFromIntent
+ "NfcAdapter ID : " + idFromIntent);
Log.v("onNewIntent()", "TAG TYPE : " + tagFromIntent.describeContents());
//Get an instance of the Mifare classic card from this TAG intent
//It works successfully with android 5.0 or below versions but returns null in devices with android 5.1.
MifareClassic mfc = MifareClassic.get(tagFromIntent);
try {
// Connect to card
mfc.connect();
// authenticate the sector
if (mfc.authenticateSectorWithKeyA(MY_SECTOR, MY_KEY)) {
for (int k = 0; k < 1; ++k) {
int block = mfc.sectorToBlock(MY_SECTOR) + k;
byte[] data = null;
try {
// Read the block
data = mfc.readBlock(block);
} catch (IOException e) {
Log.e("IOException", "\n" + "Block " + block
+ " data: " + e.getMessage());
continue;
}
// Convert the data into a string from Hex format.
blockData = ByteArrayToHexString(data);
// reading first 8 bytes only
blockData = blockData.substring(0, 8);
}
if (blockData != null) {
mp = MediaPlayer.create(context, R.raw.served);
} else {
mp = MediaPlayer.create(context, R.raw.coins);
}
} else {
Toast.makeText(context, R.string.not_valid_rfid,
Toast.LENGTH_SHORT).show();
mp = MediaPlayer.create(context, R.raw.professionals);
}
mfc.close();
} catch (IOException e) {
mp = MediaPlayer.create(context, R.raw.coins);
Toast.makeText(context, R.string.error_while_scanning,
Toast.LENGTH_SHORT).show();
} catch (NullPointerException e) {
// TODO: handle exception
mp = MediaPlayer.create(context, R.raw.coins);
Toast.makeText(context, R.string.error_while_scanning,
Toast.LENGTH_SHORT).show();
}finally {
try {
if (mfc != null)
mfc.close();
if (mp != null)
mp.start();
} catch (IOException e) {
e.printStackTrace();
}
}
return blockData;
}
您遇到的问题可能与升级到Android5.1无关。相反,为标记获取MIFAREClassic
对象的实例只能在支持MIFARE Classic的平台上工作。因此,
MifareClassic.get(tagFromIntent)
将在不支持MIFARE Classic的平台上返回null
。这基本上意味着您的应用程序只能在恩智浦NFC芯片组的设备上运行。
if (getPackageManager().hasSystemFeature("com.nxp.mifare")) { ... }
不是识别支持MIFARE Classic器件的非常可靠的方法。
我一直在到处寻找答案,但没有任何帮助。 这是我的代码: 当我试图读取URL时,下面出现了一个异常。 任何帮助都会很好。我正在尝试读取url内部的图像,并将其与现有文件进行比较。这里没有任何问题给出答案。 编辑: 我尝试在命令行“keytool-list-keystore keystore”中输入,但它只显示给我TrustedCertentries。还没有解决方案奏效。
我使用下面的示例代码来读取NFC标签,但它不是多次读取标签(有时读取3次,有时读取6-7次)。在我的应用程序中,我需要连续读取nfc标签。 https://github.com/andijakl/NfcDemo
问题内容: 这是我的客户代码 这是服务器代码 但是即使我这样修改它,我也不会在fromClient中接收任何内容 我没有结果 问题答案: 客户端需要调用或导致将缓冲的数据推送到服务器。(如果您打算写入更多数据,请刷新,否则关闭。) 服务器端需要在实例上使用readInt读取数据。使用DataOutputStream写入的数据应使用DataInputStream读取。 最后,摆脱BufferedRe
在我们的docker-swarm中运行kafka connect,使用以下撰写文件: kafka connect节点成功启动,我可以设置任务并查看这些任务的状态······ 我是否在撰写文件或任务配置中缺少某些配置?
在问题[1]中,我了解到如果您想在Android下使用NFC标签,则不必采用NDEF格式。我想在Win 8.1 in. Net下执行此操作。我的情况是这样的: 我有一个RFID卡Mifare Classic 1K,其中存储了一个ID。(由制造商记录)该ID由我们的考勤系统通过通常的RFID读取器(例如Gigatek的PROMAG MFR120)读取。我们不在卡上写任何东西,我们只需要读取ID。但是
我正在尝试从/到我的NTAG216标签读取/写入NDEF消息。 作为此开发的基础,我使用Microsoft NFC示例中的PcscSdk:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/Nfc 我能够成功连接到卡。它被识别为Mifare Ultralight,我可以读/写上面的前16个块。如果我请