2016-03-31 31 views
-1

Ich versuche, eine bestimmte Zeichenfolge über zu senden. Der Schlüssel dieser App ist, dass die Zeichenfolge vom TAG als hex Werte empfangen werden sollte, nicht ASCII. Also, das ist das Problem. Die NdefMessage() Formatierung der Zeichenfolge als Hex, auch wenn es bereits hex ist.Senden Sie formatierte Hexadezimalwerte über NFC

hier ist der Code:

byte[] lang = new byte[0]; 
try { 
    lang = Locale.getDefault().getLanguage().getBytes("UTF-8"); 
} catch (UnsupportedEncodingException e1) { 
    e1.printStackTrace(); 
} 
byte[] text = new byte[0]; // Content in UTF-8 
try { 
    text = sendDdata.getBytes("UTF-8"); 
} catch (UnsupportedEncodingException e1) { 
    e1.printStackTrace(); 
} 
int langSize = lang.length; 
int textLength = text.length; 
ByteArrayOutputStream payload = new ByteArrayOutputStream(1 + langSize + textLength); 
payload.write((byte) (langSize & 0x1F)); 
payload.write(lang, 0, langSize); 
payload.write(text,0,textLength); 
byte[] message1 = payload.toByteArray(); 
NdefMessage record = null; 
record = new NdefMessage(new NdefRecord(NdefRecord.TNF_WELL_KNOWN, new byte[0], new byte[0], message1)); 

if (tag != null) { 
    try { 
    Ndef ndefTag = Ndef.get(tag); 
    if (ndefTag == null) { 
     NdefFormatable nForm = NdefFormatable.get(tag); 
     if (nForm != null) { 
     nForm.connect(); 
     nForm.format(record); 
     nForm.close(); 
     Toast.makeText(MainActivity.this,"format",Toast.LENGTH_SHORT).show(); 
     } 
    } 
    else { 
     ndefTag.connect(); 
     ndefTag.writeNdefMessage(record); 
     ndefTag.close(); 
     Toast.makeText(MainActivity.this,String.valueOf(record),Toast.LENGTH_SHORT).show(); 
    } 
    } 
    catch(Exception e) { 
    e.printStackTrace(); 
    Toast.makeText(this,"Please attach to Tag!",Toast.LENGTH_SHORT).show(); 
    } 

und mit dem Debugger gibt es so etwas wie:

"41542b5733322c340DFD020300"

Nutzlast:

" Zeichenfolge, die gesendet werden soll en41542b5733322c340DFD020300 "

Nachricht gesendet:

NdefMessage [NdefRecord tnf=1 payload=02656E3431353432623537333333323263333430444644303230333030] 

Ist eine Möglichkeit, nur als Hex zu senden, ohne es wieder zu Umwandlung zu verhexen?

Und zweite Frage: Ist es eine Möglichkeit, eine Ndef-Nachricht ohne Header zu senden? nur die Nutzlast?

Vielen Dank im Voraus.

Antwort

1

Sie erstellen einen Datensatz mit dem TNF "TNF_EXTERNAL_TYPE" (NdefRecord definition). Dieser tnf ist für eine RTD von Text, URI oder SmartPoster definiert. Binärwerte sollten nicht dorthin gehen.

Wenn Sie Binärwerte speichern möchten, sollten Sie einen Datensatz mit dem TNF "TNF_UNKNOWN" verwenden. Dort haben Sie die Freiheit, die Daten in einem beliebigen Format zu speichern.

In diesem Fall muss jedoch die Anwendung, die das Tag liest, die Daten entsprechend interpretieren. Wenn es Ihre App ist, können Sie das leicht tun. Wenn die Lese-App etwas anderes ist, müssen Sie möglicherweise den Definitionen entsprechen, die die App versteht.

+0

Die App liest auch das Tag mit dem gleichen Format. Ich habe das Tag noch nicht gelesen, weil ich den zu lesenden Befehl schreiben sollte, dann antwortet das Tag mit den angeforderten Daten. Das Format ist das gleiche (nur Hex-Werte). Nun, mit der "TNF_UNKNOWN" bin ich in der Lage, die Nachricht ohne Header (z. B. "en") zu senden, nur die Zeichenfolge, die ich will? Danke, Mihai –

+0

Ja, mit "TNF_UNKNOWN" liegt die Formatierung bei Ihnen. Aber es gibt immer einen Header, der benötigt wird, um dem System mitzuteilen, welche Art von Daten in einem Datensatz enthalten sind. Abhängig von der Art des gefundenen tnf agiert das System mit diesen Daten entsprechend dieser Art von tnf. – corvairjo

+0

Vielleicht gehe ich weg, aber ich habe viele Lösungen ausprobiert, aber ich kann immer noch nicht senden, was ich senden soll :). Soweit ich verstanden habe, sollte ich ein Byte-Array in der Nachricht haben. Das Problem ist, wenn ich meine Zeichenfolge in Byte-Array formatiere, formatiert es automatisch als ASCII oder UTF-8 oder irgendetwas anderes. Ist es eine Chance meine Saite zu verlassen wie sie ist? Zum Beispiel habe ich eine Zeichenfolge wie "0D020100" und ich möchte diese Zeichenfolge senden, nicht "3044303230313030" (der ASCII-Code für jedes Element aus Zeichenfolge). Bitte, wenn du einen Hinweis hast, wie das geht, sei nett und sag es mir. Grüße, Mihai –