2017-10-09 15 views
1

J'ai créé un NFC en lecture/partie d'écriture de mon code d'application, où:Les données manquantes lors de la lecture URI de l'étiquette NFC

READ est responsable du traitement des données et le déclenchement d'un navigateur Web:

ndef.connect() 
val ndefMessage = ndef.ndefMessage 
if (ndefMessage.records != null && ndefMessage.records.isNotEmpty()) { 
    message = String(it.records[0].payload) 
} 
ndef.close() 

ECRITURE écrit une URL sur le tag NFC:

ndef.connect() 
val mimeRecord = NdefRecord.createUri(url) 
ndef.writeNdefMessage(NdefMessage(mimeRecord)) 
ndef.close() 

Pour une raison mystérieuse quand j'écris l'URL « http://www.google.com », mon ma message variable (après avoir lu une étiquette avec cette URL) contient uniquement "google.com". Je n'ai aucune idée pourquoi le reste de l'URL ("http://www.") Est supprimé/ommited. Pouvez-vous me dire ce qui se passe? Où est mon erreur?

+0

Pour clarifier les choses, vous écrivez la variable 'url' à la balise, qui a la valeur 'http: // www.google.com', et quand vous l'avez lu, le retour est juste' google.com'? Avez-vous essayé une autre URL? Il peut être utile de voir où l'URL est créée. – WoogieNoogie

+0

Oui pour le moment, cela fonctionne exactement comme vous l'avez écrit. Oui j'ai essayé différentes URLs - aucune différence tho: CI a lu l'URL du widget 'EditText' et l'a passé à mon 'TagManager' – JakubW

+0

Je ne peux pas le mettre comme une réponse, car c'est plus une théorie, mais des informations NFC doit être court et concis. Il est très possible que la bibliothèque Ndef raccourcisse l'URL à dessein, si elle commence par 'http: // www', car c'est un peu l'URI" par défaut ". – WoogieNoogie

Répondre

1

Vous essayez de décoder la charge utile de l'enregistrement NDEF sous forme de texte simple (UTF-8 chaîne codée):

message = String(it.records[0].payload) 

Cependant, vous avez écrit l'URL comme un enregistrement URI NFC Forum:

NdefRecord.createUri(url) 

Par conséquent, vous devez interpréter l'enregistrement URI conformément à la spécification de définition de type d'enregistrement URI du forum NFC (avaibale du forum NFC). La charge utile d'un tel enregistrement d'URI est constituée d'un octet d'abréviation (que vous pouvez utiliser pour rechercher le préfixe d'URI dans une table de préfixes bien définis) et du suffixe d'URI (codé en UTF-8).

Vous pouvez soit analyser la charge utile d'enregistrement sur votre propre ou de laisser Android à la magie pour vous en utilisant quelque chose comme:

uriString = it.records[0].toUri()