как отправить обычный текст только с помощью nfc android beam

Я использую Eclipse-Android и создаю приложение, которое должно отправлять обычный текст, используя этот код:

РЕДАКТИРОВАТЬ:

private void write(String text, Tag tag) throws IOException, FormatException {

    NdefRecord[] records = { createTextRecord(text, "yes") };
    NdefMessage  message = new NdefMessage(records);
    // Get an instance of Ndef for the tag.
    Ndef ndef = Ndef.get(tag);
    // Enable I/O
    ndef.connect();
    // Write the message
    ndef.writeNdefMessage(message);
    // Close the connection
    ndef.close();
}

private NdefRecord createRecord(String text) throws UnsupportedEncodingException {
    String lang       = "en";
    byte[] textBytes  = text.getBytes();
    byte[] langBytes  = lang.getBytes("US-ASCII");
    int    langLength = langBytes.length;
    int    textLength = textBytes.length;
    byte[] payload    = new byte[1 + langLength + textLength];

    // set status byte (see NDEF spec for actual bits)
    payload[0] = (byte) langLength;

    // copy langbytes and textbytes into payload
    System.arraycopy(langBytes, 0, payload, 1,              langLength);
    System.arraycopy(textBytes, 0, payload, 1 + langLength, textLength);

    NdefRecord recordNFC = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,  NdefRecord.RTD_TEXT,  new byte[0], payload);

    return recordNFC;
}

Но то, что я прочитал с моим arduino, — это название пакета и ссылка на магазин Google Play. как я могу настроить его так, чтобы единственным сообщением, которое будет прочитано, был обычный текст?


person jaspher chloe    schedule 19.03.2015    source источник
comment
Вы не можете передавать обычный текст. Вы можете передавать только одну или несколько записей NDEF.   -  person ThomasRS    schedule 19.03.2015
comment
означает ли это, что я могу передавать только ссылку на игровой магазин или имя пакета?   -  person jaspher chloe    schedule 19.03.2015
comment
Ваш вопрос не включает соответствующий код! Где createRecord() называется? Как активировать/зарегистрироваться в Beam? Какое устройство вы используете?   -  person Michael Roland    schedule 19.03.2015
comment
я редактирую свой пост и добавляю дополнительный код   -  person jaspher chloe    schedule 19.03.2015
comment
Это все еще не соответствующий код! Вы внедряете SNEP/Android Beam на стороне Arduino? Ndef ndef = Ndef.get(tag); выглядит так, как будто вы пытаетесь получить доступ к стороне Arduino как тегу NFC — это, конечно, не код для Android Beam.   -  person Michael Roland    schedule 19.03.2015


Ответы (1)


Я использовал этот код для создания текстовой записи, и это отлично работает

public static NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) {
    byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
    Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");
    byte[] textBytes = payload.getBytes(utfEncoding);
    int utfBit = encodeInUtf8 ? 0 : (1 << 7);
    char status = (char) (utfBit + langBytes.length);
    byte[] data = new byte[1 + langBytes.length + textBytes.length];
    data[0] = (byte) status;
    System.arraycopy(langBytes, 0, data, 1, langBytes.length);
    System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length);
    NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
    NdefRecord.RTD_TEXT, new byte[0], data);
    return record;
} 

Добавьте следующие фильтры намерений в свою активность в файле AndroidManifest.xml:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="text/plain" />
</intent-filter>

Посетите: http://developer.android.com/guide/topics/connectivity/nfc/nfc.html для получения дополнительной информации о NFC.

person Zeeshan Ali    schedule 12.04.2015