2012-12-20 11 views
13

nie miałem szczęścia używając google do tego, więc pomyślałem.Jak wysłać ciąg znaków za pomocą NFC z telefonu Windows 8 na urządzenie z Androidem

Czy ktoś ma jakieś doświadczenie/wie, jak wysłać prosty ciąg, np. "Cześć" z urządzenia z systemem Windows Phone 8 do urządzenia z systemem Android?

do tej pory udało nam się zrobić Android -> Android i Android -> Windows Phone 8, ale nie byliśmy w stanie dowiedzieć się, jak to zrobić z Windows Phone 8 na Androida.

Czy ktoś widział przewodnik online lub wiedział, jak to zrobić?

Pierwszym krokiem, który chciałbym się dowiedzieć, jak sprawić, aby aplikacja na telefonie z systemem Windows 8 zdała sobie sprawę z tego, że znajduje się ona w pobliżu urządzenia NFC z Androidem ... i wtedy będzie można dowiedzieć się, jak sprawić, aby aplikacja na telefonie z systemem Android odbierała wiadomość.

Z góry dziękuję!

* Answer *

Dobrze tak Oto kilka odpowiedzi/porady

skończyło się na wysyłanie wiadomości NFC jak rodzaj zewnętrznego bo wysyłając aplikację/my.mimetype prowadzonego dając mi „przepraszam telefon nie mogę zregenerować tego typu pliku "na telefonie z Windows, mimo że wiadomość została przekroczona.

@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; 
} 

wszystko trzeba zrobić w Android jest śledzić android przykład z próbek SDK (Android-16/17 - AndroidBeamDemo), który jest wyjaśnione bardzo dokładnie tutaj - http://www.tappednfc.com/wp-content/uploads/TAPPED-NFCDeveloperGuide-Part1.pdf

ale zamiast korzystać z aplikacji mimetype użyć powyższego typu zewnętrznego i umieścić w swoim manifeście następujące zamiast typu mIME w filtrze zamiar:

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

dotyczące czytanie i wysyłanie wiadomości z telefonu z systemem Windows można użyć tego, co przyjętej odpowiedź facet powiedział, że powinien i powinien działać, ale dla typu put cco.drugformulary: externalType jak z góry (oczywiście nazwa twojego projektu).

Jeśli używasz do jakichkolwiek problemów zachęcamy do mnie

Odpowiedz

19

zapytać Podczas korzystania z WP8 NFC jest zasadniczo dwa rodzaje komunikatów można pracować z: Komunikaty dla systemu operacyjnego Windows i komunikaty NDEF. Komunikaty specyficzne dla systemu Windows są łatwe do wykrycia, ponieważ publikuje się je jako typy wiadomości "Windows. *". Jednak komunikaty NDEF są publikowane za pomocą typu komunikatu "NDEF". Na przykład, oto wiadomość app-specyficzny 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 jest mocno wykorzystywanym formatem wieloplatformowy przeznaczona do optymalizacji dla bardzo ograniczonej przestrzeni środowiska tagów NFC (często poniżej 100 bajtów). Podczas gdy środowisko WP8 Proximity pozwala na wysyłanie & otrzymujących wiadomości NDEF, nic nie wie o formacie NDEF. Oznacza to, że struktura zbliżeniowa WP8 wysyła i odbiera strumień bajtów. Parsowanie tego strumienia bajtów i prawidłowe formatowanie to twoja odpowiedzialność jako programisty aplikacji.

Aby sformatować komunikaty NDEF w formacie &, należy użyć frameworku innej firmy lub utworzyć własną. Pod względem frameworków zewnętrznych NDEF Library for Proximity APIs wykonuje świetną robotę.

Na przykład, oto jak sformatować i napisać wiadomość NDEF aplikacji specyficznych pomocą 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."); 
     } 
    } 

A oto jak odbierać i przetwarzać wiadomości NDEF w aplikacji:

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())); 
    } 

Po uruchomieniu tego fragmentu kodu w WP8 i kliknięciu wcześniej zapisanego tagu NDEF możemy zobaczyć następujący komunikat:

MessageBox saying Hello World

A jeśli weźmiemy ten sam tag NFC i używać Androida NFC TagInfo aplikację możemy zobaczyć te same dane:

NfcTag Info data on Android

W przypadku, gdy zastanawiasz się, co faktycznie pobiera transmitowane/trasnfered podczas korzystania NDEF, oto GoToTags systemu Windows App na etykiecie po prostu użyć:

GoToTags showing the binary data stored in the NDEF tag

Jeśli NDEF Biblioteka czuje się trochę ciężkie dla ciebie, zawsze można korby jesteś na homegrown formater NDEF i par ser. Dobrym tego przykładem jest projekt Nokia OSS @NFC Tag Reader

W przypadku telefonu NFC między telefonem a telefonem NFC powyższe fragmenty kodu będą działać w obu scenariuszach. Jeśli chcesz pisać do znacznika, simlpy zachowaj operację ": WriteTag" w typie wiadomości. Jeśli chcesz komunikować się bezpośrednio z pobliskim telefonem, po prostu usuń operację ": WriteTag". Oba działają dobrze z WP8 < => Android.

Pamiętaj jednak, że istnieją różnice w sposobie, w jaki Android & adres WP8 NDEF. WP8 może tylko odczytać pierwszy rekord NDEF w wiadomości, podczas gdy Android może odczytać wszystkie rekordy NDEF. Android może pracować z tagami w formacie innym niż NDEF i formatować je; WP8 musi używać tagów w formacie NDEF.

Powiązane problemy