问题描述
我尝试构建一个 NFC 应用程序,它仍然可以正常工作 - 除了一个大问题。当我想用我的应用描述新购买的 NFC 标签时,这不适用于错误代码: 错误:NDEF 标记不包含任何 NDEF 消息。 但是,如果我从 AppStore 打开另一个 NFC 应用程序,它可以与标签完美配合。 同样奇怪的是,一旦我使用另一个 NFC 应用向标签写入文本,我的应用现在可以完美运行,我现在可以写入标签。
所以我的问题是,为什么我只能使用已经包含消息的应用编写 NFC 标签?
我也很想知道如何对我的应用程序进行编程,以便它也可以写入空标签。由于这也适用于 AppStore 中的其他应用程序,因此在 iOS 上一定可以。
非常感谢所有花时间解决我的问题的人。
Future<void> writetoTag()async{
try {
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
if (Platform.isAndroid) {
showDialog(
context: context,builder: (context) => AlertDialog(
title: const Text("Halten Sie Ihr Gerät an den Chip,den Sie lesen möchten"),actions: <Widget>[
FlatButton(
child: const Text("Cancel"),onpressed: () {
_stream?.cancel();
Navigator.pop(context);
},),],);
}
List <NDEFRecord> my = [NDEFRecord.type("Chip",_random)];
NDEFMessage Message = NDEFMessage.withRecords(my);
await NFC.writeNDEF(Message,once: true).first;
funktinoiert.year = true;
setState(() {
isloading = true;
});
int time = DateTime.Now().millisecondsSinceEpoch;
Map<String,dynamic> data = {
"random" : _random,"Time" : time,};
await Firestore.instance
.collection("NFC")
.document(_random)
.setData(data)
.catchError((e) {
funktinoiert.year = false;
print(e);
});
await Firestore.instance
.collection("Anzahl")
.document("Prototyp")
.updateData({"NFC": FieldValue.increment(1)})
.catchError((e) {
print(e);
});
}
}
on FirebaseException catch (e) {
newEntryFehlermeldung("$e \n\n Bitte versuchen Sie es erneut. Sollten Sie den Fehler nicht beheben können hilft unser Team Ihnen gerne weiter.");
funktinoiert.year = false;
} on PlatformException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten,bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCUserCanceledSessionException {
funktinoiert.year = false;
return null;
} on NFCSessionTerminatedUnexpectedlyException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten,bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCSessionTimeoutException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten,bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCTagNotWritableException {
newEntryFehlermeldung("Es sieht so aus,als wäre der Chip nicht beschreibbar. Bitte versuchen Sie es erneut.");
funktinoiert.year = false;
} on NFCTagSizetooSmallException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten,bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCTagUnwritableException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten,bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCTagUnavailableException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten,bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on NFCSystemIsBusyException {
newEntryFehlermeldung("Es ist ein Fehler aufgetreten,bitte versuchen Sie es erneut");
funktinoiert.year = false;
} on Exception catch (exception) {
newEntryFehlermeldung("$exception \n\n Bitte versuchen Sie es erneut. Sollten Sie den Fehler nicht beheben können hilft unser Team Ihnen gerne weiter.");
funktinoiert.year = false;
Navigator.pushReplacementNamed(context,"/home");
print(exception);
} catch (e) {
funktinoiert.year = false;
newEntryFehlermeldung("Es besteht keine Verbindung zum Internet. Bitte versuchen Sie es erneut. Sollten Sie den Fehler nicht beheben können hilft unser Team Ihnen gerne weiter.");
}
if(funktinoiert.year == true){
newEntry();
funktinoiert.year = false;
} else{
newEntryFehlermeldung("Es ist ein Fehler aufgetreten,bitte versuchen Sie es erneut");
}
setState(() {
isloading = false;
});
Navigator.pushReplacementNamed(context,"/home");
}
解决方法
好的,标签来自工厂已经为 NDef 格式化(这意味着它是一个类型 2 标签,如果有一个能力容器并包含一个空的 Ndef 消息 TLV 块)
问题在于我想说的是 Flutter 插件无法解决 iOS 中的错误(插件中的错误也是如此)。
问题是该插件仅在包含 NDEF 消息的标签时要求 iOS 得到通知,iOS 将此解释为负载数据大于 0 字节的 NDEF 消息,而此类标签的 NFC 规范表示检测包括零长度 NDEF 消息。
其他 iOS 应用程序的工作原理是它们可能是解决此 iOS 错误的本机应用程序,通过要求 iOS 在任何类型的标签进入范围时得到通知,然后在写入非空标签之前检查它是否具有 Ndef 能力NDef 消息给他们。
如何为您修复它很困难,请尝试其他一些 NFC flutter 插件或自己编写。
我至少会为 NFC flutter 插件提出错误/功能请求,以使其处理这种情况。
对于 iOS,这可能是因为它只能读取 NDef 消息而无法写入它们,因为 iOS 中的 NFC 支持很差。