Подтвердить что ты не робот

Как отправить строку с помощью NFC с телефона Windows 8 на устройство Android

мне не повезло с помощью Google, поэтому я подумал, что спрошу.

Есть ли у кого-нибудь опыт/знать, как отправить простую строку i.e "привет" с устройства Windows Phone 8 на Android-устройство?

до сих пор мы смогли сделать Android-android android → windows phone 8, но нам не удалось выяснить, как это сделать с Windows Phone 8 на Android.

Кто-нибудь видел руководство в Интернете или умеет делать такую ​​вещь?

Первый шаг, на мой взгляд, заключается в том, чтобы выяснить, как заставить приложение на телефоне Windows 8 реализовать его около устройства NFC для Android. И тогда было бы выяснить, как заставить приложение на телефоне Android получать сообщение.

Спасибо заранее!

* Ответ *

Хорошо, вот некоторые ответы/советы

В итоге я отправил сообщения NFC в качестве внешнего типа, потому что отправка приложения /my.mimetype продолжала давать мне "извините, что ваш телефон не может отредактировать этот тип файла" на телефоне Windows, даже несмотря на то, что сообщение прошло.

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

все, что вам нужно сделать в Android, - это следовать примеру Android из образцов SDK (андроид-16/17 - AndroidBeamDemo), который объясняется здесь чрезвычайно подробно - http://www.tappednfc.com/wp-content/uploads/TAPPED-NFCDeveloperGuide-Part1.pdf

но вместо использования mimetype приложения используйте вышеупомянутый внешний тип, и в манифесте помещаем вместо фильтра mimetype в фильтр намерения:

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

относительно чтения и отправки сообщения с телефона Windows вы можете использовать то, что сказал ответный парень, и он должен работать, но для типа put cco.drugformulary: externalType как сверху (ваше название проекта, конечно, хотя).

Если у вас возникли проблемы, не стесняйтесь спрашивать меня

4b9b3361

Ответ 1

При использовании WPFC NFC в основном существуют два типа сообщений, с которыми вы можете работать: сообщениями, специфичными для Windows, и сообщениями NDEF. Конкретные сообщения Windows легко обнаружить, поскольку вы будете публиковать их как типы сообщений "Windows. *". Однако сообщения NDEF публикуются с использованием типа сообщения "NDEF". Например, здесь сообщение для приложения 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 - это сильно используемый кросс-платформенный формат, предназначенный для оптимизации среды с ограниченным пространством тегов NFC (часто до 100 байт). Хотя структура WP8 Proximity позволяет отправлять и получать сообщения NDEF, она ничего не знает о формате NDEF. Смысл, инфраструктура близости WP8 отправляет и принимает поток байтов. Анализ этого потока байтов и его форматирование является вашей ответственностью как разработчик приложения.

Чтобы отформатировать и разобрать NDEF-сообщения, вам нужно либо использовать стороннюю структуру, либо создать собственный. С точки зрения сторонних фреймворков Библиотека NDEF для API близости отлично справляется.

Например, здесь, как форматировать и записывать приложение NDEF для приложения, используя Библиотека NDEF:

    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.");
        }
    }

А вот как получать и анализировать сообщения NDEF в вашем приложении:

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

Когда мы запускаем этот фрагмент кода в WP8 и нажимаем ранее написанный тег NDEF, мы можем видеть следующее сообщение:

MessageBox saying Hello World

И если мы возьмем те же теги NFC и используем Android приложение NFC TagInfo, мы можем увидеть те же данные:

NfcTag Info data on Android

Если вам интересно, что на самом деле передается/передается при использовании NDEF, здесь GoToTags Windows App на тег, который мы используем:

GoToTags showing the binary data stored in the NDEF tag

Если библиотека NDEF немного тяжела для вас, вы всегда можете вытащить из себя исходный формат и парсер NDEF. Вот хороший пример этого в проекте Nokia OSS @NFC Tag Reader

Что касается NFC от телефона к телефону или от NFC от телефона к тегу, фрагменты кода выше будут работать для любого сценария. Если вы хотите написать тег, попробуйте сохранить операцию ": WriteTag" в типе сообщения. Если вы хотите напрямую связаться с ближайшим телефоном, просто удалите операцию ": WriteTag". Оба отлично работают с WP8 <= > Android.

Обратите внимание, что есть различия в том, как Android и WP8 адрес NDEF. WP8 может читать только первую запись NDEF в сообщении, тогда как Android может читать все записи NDEF. Android может работать с тегами, отформатированными в формате NDEF, и форматировать их; WP8 должен использовать теги формата NDEF.