- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近我正在尝试读取一张 MifareClassic 1K 卡。在了解到只有某些带有 NXP 芯片的手机能够读取这些标签的事实后,我遇到了一个新问题。
我正在尝试读取的卡片会抛出标题中提到的错误,但仅在未单步执行代码的情况下运行。这里有一些细节:起初,我从 Xamarin 获取了 NFCSample 并更改了一些东西:
protected override void OnNewIntent(Intent intent)
{
if(_inWriteMode)
{
_inWriteMode = false;
var tag = intent.GetParcelableExtra(NfcAdapter.ExtraTag) as Tag;
if(tag == null)
{
return;
}
MifareClassic mifc = MifareClassic.Get(tag);
DisplayMessage("NFC recognized");
try
{
mifc.ConnectAsync().Wait();
DisplayMessage("Connected to Mifare Tag");
DisplayMessage("SectorCount:" + mifc.SectorCount);
DisplayMessage("BlockCount in Sector 1:" + mifc.GetBlockCountInSector(1));
byte[] blargh = new byte[6];
MifareClassic.KeyDefault.CopyTo(blargh,0);
if(Task.Factory.StartNew<bool>(() => mifc.AuthenticateSectorWithKeyA(1, blargh)).Result)
{
DisplayMessage("Auth A Complete");
blargh = new byte[6];
MifareClassic.KeyDefault.CopyTo(blargh, 0);
if(Task.Factory.StartNew<bool>(() => mifc.AuthenticateSectorWithKeyB(1, blargh)).Result)
{
DisplayMessage("Auth B Complete");
DisplayMessage("Read All Blocks of Section 1 ...");
int firstBlock = mifc.SectorToBlock(1);
int lastBlock = firstBlock + 3;
List<byte[]> lstBlocks = new List<byte[]>();
for(int i = firstBlock; i < lastBlock; i++)
{
DisplayMessage("Read Block " + i);
byte[] block = mifc.ReadBlockAsync(i).Result; //fails without stepping through in Debug mode
lstBlocks.Add(block);
}
string BlockData = string.Empty;
foreach(var item in lstBlocks)
{
BlockData += Encoding.ASCII.GetString(item) + "\r\n";
}
DisplayMessage(BlockData);
}
}
DisplayMessage("Close Connection");
mifc.Close();
}
catch(Exception ex)
{
DisplayMessage(ex.ToString());
}
}
}
因此,如果我单步执行代码,ReadBlock/ReadBlockAsync 工作得很好。如果没有断点,它将抛出上述异常。这里有什么问题吗?
编辑:异常的 StackTraces:外部异常:
One or more errors occurred.
at System.Threading.Tasks.Task.ThrowIfExceptional (Boolean includeTaskCanceledExceptions) [0x00014] in <filename unknown>:0
at System.Threading.Tasks.Task`1[System.Byte[]].GetResultCore (Boolean waitCompletionNotification) [0x00034] in <filename unknown>:0
at System.Threading.Tasks.Task`1[System.Byte[]].get_Result () [0x0000b] in <filename unknown>:0
at NfcXample.MainActivity.OnNewIntent (Android.Content.Intent intent) [0x001d0] in c:\\Users\\user\\Desktop\\monodroid-samples-master\\NfcSample\\MainActivity.cs:94 "
内部异常:
Exception of type 'Java.IO.IOException' was thrown.
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000b] in <filename unknown>:0
at Android.Runtime.JNIEnv.CallObjectMethod (IntPtr jobject, IntPtr jmethod, Android.Runtime.JValue* parms) [0x00064] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d419c934/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:195
at Android.Nfc.Tech.MifareClassic.ReadBlock (Int32 p0) [0x00044] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d419c934/source/monodroid/src/Mono.Android/platforms/android-10/src/generated/Android.Nfc.Tech.MifareClassic.cs:360
at Android.Nfc.Tech.MifareClassic+<ReadBlockAsync>c__AnonStorey2.<>m__0 () [0x00000] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d419c934/source/monodroid/src/Mono.Android/platforms/android-10/src/generated/Android.Nfc.Tech.MifareClassic.cs:367
at System.Threading.Tasks.Task`1[System.Byte[]].InnerInvoke () [0x00012] in <filename unknown>:0
at System.Threading.Tasks.Task.Execute () [0x00016] in <filename unknown>:0
--- End of managed exception stack trace ---
java.io.IOException: Transceive failed
at android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:52)
at android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)
at android.nfc.tech.MifareClassic.readBlock(MifareClassic.java:425)
at dalvik.system.NativeStart.run(Native Method)
最佳答案
太快了!
该设备正在快速读取卡。插入 System.Threading.Thread.Sleep(100)
后,它终于成功了! for 循环现在看起来像这样:
for(int i = firstBlock; i < lastBlock; i++)
{
if(mifc.IsConnected)
{
DisplayMessage("Read Block " + i);
System.Threading.Thread.Sleep(100);
byte[] block = mifc.ReadBlockAsync(i).Result;
lstBlocks.Add(block);
}
else
{
DisplayMessage("Card Disconnected");
}
}
关于c# - 读取 MifareClassic 标签抛出 java.io.IOException : Transceive Failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846962/
我正在尝试在 Samsung Galaxy S3 和支持 NfcA 和 IsoDep (Mifare DESFire EV1) 的智能卡之间进行通信。为此,我启用了 forgeground dispa
我编写了一个 Android 应用程序,它使用 transceive() 函数与 NFC-V 卡进行通信。我的问题是那条线 byte[] response = nfcv.transceive(comm
我正在开发一个有关 NFC 写入的应用程序。我们称之为 Writer...我正在将数据写入 NfcV 标签。 我试图写入的字符串是String test = "this is\ta real\ttes
我正在开发一个可以在 NFC 标签上读写的 android 应用程序。我可以毫无问题地读取我已经写过东西的标签,但是当我使用空白标签时,我很难读取十六进制代码中标签的 UID。 我使用的是 mifar
我使用 NFC 标签,它发现了 ISO、NFCA 和 NDEF 技术。有信息要从芯片读取,我尝试访问内存,但我用来与TAG通信的大多数命令都以响应[110, 0] 字节。我找不到这是什么意思,其中一些
我正在尝试将我的 Android 平板电脑连接到使用 NFC 的设备并从该设备检索数据。 我尝试过的 按照 nfc_device_detection_1.01.pdf 中的说明发送命令(第四章) tr
我正在尝试模拟 PoS,销售点 :),系统并使用在 2013 Nexus 7(无安全元件)v4.4.2 上运行的 Google 钱包完成交易。 我的 PoS 原型(prototype)也在 2013
最近我正在尝试读取一张 MifareClassic 1K 卡。在了解到只有某些带有 NXP 芯片的手机能够读取这些标签的事实后,我遇到了一个新问题。 我正在尝试读取的卡片会抛出标题中提到的错误,但仅在
我试图在我的空 NTAG213 标签上设置密码,但是当我开始编写 PACK 和 PWD 时,我的应用程序崩溃了,没有抛出任何异常。我确实让我的应用程序足够远,可以编写有效的 NDEF 消息并读取它们,
我有许多新手 NfcA 问题。在 docs 和网络上的其他地方似乎对此几乎没有指导,所以我希望没有人介意我在这里将一些基本问题串在一起...... 我正在使用 nfcA.transceive() 将数
我仍在尝试模拟销售点 (POS) 系统并使用 Google 钱包完成交易。我在堆栈溢出方面得到了很好的答案。参见 Android isoDep.transceive on Generate AC co
我是一名优秀的程序员,十分优秀!