2012-12-20 16 views
13

non ho avuto fortuna nell'utilizzare Google per questo motivo, così ho pensato di chiedere.Come inviare una stringa utilizzando NFC da un telefono Windows 8 a un dispositivo Android

Qualcuno ha esperienza/sa inviare una semplice stringa "Ciao" da un dispositivo Windows Phone 8 a un dispositivo Android?

finora siamo stati in grado di fare android -> android e android -> windows phone 8 ma non siamo stati in grado di scoprire come fare da Windows Phone 8 ad Android.

Qualcuno ha visto una guida online o sa come fare una cosa del genere?

Il primo passo credo sarebbe quello di scoprire come rendere l'applicazione su Windows Phone 8 realizzare il suo vicino a un dispositivo Android NFC .. e quindi sarebbe capire come rendere l'applicazione sul telefono Android ricevere il messaggio.

Grazie in anticipo!

* risposta *

Bene ecco alcune risposte/suggerimenti

ho finito per l'invio dei messaggi NFC come tipo esterno poiché l'invio di applicazione/my.mimetype mi ha tenuto dando un "scusate il telefono non riesco a ricordare questo tipo di file "sul telefono di Windows anche se il messaggio stava arrivando.

@Override 
public NdefMessage createNdefMessage(NfcEvent event) { 

    NdefMessage ndefMessage = new NdefMessage(( 
      new NdefRecord[] {createMimeRecord("packageName:externalType",docId.getBytes())})); 

    return ndefMessage; 
} 

public NdefRecord createMimeRecord(String mimeType, byte[] payload) { 
    byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII")); 
    NdefRecord mimeRecord = new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, mimeBytes, new byte[0], payload); 
    return mimeRecord; 
} 

tutto quello che dovete fare in Android è di seguire l'esempio di Android dai campioni SDK (Android-16/17 - AndroidBeamDemo) che è spiegato molto bene qui - http://www.tappednfc.com/wp-content/uploads/TAPPED-NFCDeveloperGuide-Part1.pdf

ma invece di usare l'applicazione mimetype utilizzare il tipo di esterno di cui sopra e nel vostro manifesto inserire il seguente invece che il tipo MIME nel filtro intento:

   <data 
       android:host="ext" 
       android:pathPrefix="/cco.drugformulary:externalType" 
       android:scheme="vnd.android.nfc" /> 

per quanto riguarda la lettura e l'invio del messaggio dal telefono di Windows è possibile utilizzare ciò che la risposta accettata il ragazzo ha detto di fare e dovrebbe funzionare ma per il tipo metti cco.drugformulary: externalType come da sopra (il nome del tuo progetto ovviamente).

Se si esegue in qualche problema non esitate a chiedere a me

risposta

19

Quando si utilizza WP8 NFC ci sono fondamentalmente due tipi di messaggi che è possibile lavorare con: specifiche di Windows e messaggi NDEF. I messaggi specifici di Windows sono facili da individuare poiché li pubblicherai come tipi di messaggi "Windows. *". Tuttavia, i messaggi NDEF vengono pubblicati utilizzando il tipo di messaggio "NDEF". Ad esempio, ecco un messaggio specifico-app di Windows:

private void WriteAppSpecificStringToTag(object sender, RoutedEventArgs e) 
    { 
     ProximityDevice device = ProximityDevice.GetDefault(); 

     if (device != null) 
     { 
      device.PublishBinaryMessage("Windows:WriteTag.myApp", 
       GetBufferFromString("Hello World!"), 
       UnregisterOnSend); 

      MessageBox.Show("Tap to write 'Hello World' on tag."); 
     } 
    } 

NDEF è un formato multipiattaforma pesantemente utilizzato lo scopo di ottimizzare per il estremamente spazio vincolata ambiente di tag NFC (spesso meno di 100 byte). Mentre il framework WP8 Proximity consente di inviare & ricevendo messaggi NDEF, non sa nulla del formato NDEF. Ciò significa che il framework di prossimità WP8 invia e riceve un flusso di byte. L'analisi di questo flusso di byte e la formattazione corretta è responsabilità dell'utente come sviluppatore dell'app.

Per formattare & analizzare i messaggi NDEF è necessario utilizzare un framework di terze parti o crearne uno personalizzato. In termini di quadri di terze parti NDEF Library for Proximity APIs fa un ottimo lavoro.

Ad esempio, ecco come formattare e scrivere un messaggio di NDEF specifica per l'applicazione utilizzando il NDEF Library:

private void WriteNDEFRecordToTag(object sender, RoutedEventArgs e) 
    { 
     ProximityDevice device = ProximityDevice.GetDefault(); 

     if (device != null) 
     { 
      device.PublishBinaryMessage("NDEF:WriteTag", 
       new NdefMessage() 
       { 
        new NdefRecord 
        { 
         TypeNameFormat = NdefRecord.TypeNameFormatType.ExternalRtd, 
         Type = "myApp".Select(c => (byte) c).ToArray(), 
         Payload = "Hello World!".Select(c => (byte) c).ToArray() 
        } 
       }.ToByteArray().AsBuffer(), 
       UnregisterOnSend); 

      MessageBox.Show("Tap to write 'Hello World' on tag."); 
     } 
    } 

ed ecco come ricevere e analizzare i messaggi NDEF nella vostra applicazione:

private void ReadNDEFRecordFromTag(object sender, RoutedEventArgs e) 
    { 
     ProximityDevice device = ProximityDevice.GetDefault(); 

     if (device != null) 
     { 
      device.SubscribeForMessage("NDEF", ndefMessageRecieved); 

      MessageBox.Show("Registered to NFC tag. Tap with NFC tag."); 
     } 
    } 

    private void ndefMessageRecieved(ProximityDevice sender, ProximityMessage message) 
    { 
     var ndefMessage = NdefMessage.FromByteArray(message.Data.ToArray()); 

     StringBuilder sb = new StringBuilder(); 
     foreach (NdefRecord record in ndefMessage) 
     { 
      sb.AppendLine(Encoding.UTF8.GetString(record.Payload, 0, record.Payload.Length)); 
     } 
     Dispatcher.BeginInvoke(() => MessageBox.Show(sb.ToString())); 
    } 

Quando eseguiamo questo snippet di codice su WP8 e tocchiamo il tag NDEF precedentemente scritto, possiamo vedere il seguente messaggio:

MessageBox saying Hello World

E se prendiamo lo stesso tag NFC e utilizziamo NFC TagInfo app di Android possiamo vedere gli stessi dati:

NfcTag Info data on Android

Nel caso vi stiate chiedendo cosa in realtà viene trasmesso/trasnfered quando si utilizza NDEF, ecco GoToTags di Windows App sul tag che abbiamo basta usare:

GoToTags showing the binary data stored in the NDEF tag

Se NDEF Biblioteca si sente un po 'pesante per voi, si può sempre sfornare la tua su homegrown formattatore NDEF e pAR ser. Ne è un buon esempio in questo progetto OSS Nokia @NFC Tag Reader

Per quanto riguarda il telefono NFC da cellulare a NFC, i frammenti di codice sopra funzioneranno per entrambi gli scenari. Se vuoi scrivere su un tag, mantieni l'operazione ": WriteTag" nel tipo di messaggio. Nel caso in cui si desideri comunicare direttamente con un telefono vicino, rimuovere l'operazione ": WriteTag". Entrambi funzionano perfettamente con WP8 < => Android.

Si noti tuttavia che ci sono differenze nel modo in cui Android & indirizzo WP8 NDEF. WP8 può solo leggere il primo record NDEF in un messaggio, mentre Android può leggere tutti i record NDEF. Android può funzionare con tag non formattati NDEF e formattarli; WP8 deve usare tag formattati NDEF.

Problemi correlati