@Override public NdefMessage createNdefMessage(NfcEvent event) { return(new NdefMessage( new NdefRecord[] { buildNdefRecord(), NdefRecord.createApplicationRecord("com.commonsware.android.jimmyb") })); }
String action = getIntent().getAction(); if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) { Parcelable[] messages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); for (int i = 0; i < messages.length; i++) { NdefMessage message = (NdefMessage)messages[i]; NdefRecord[] records = message.getRecords(); for (int j = 0; j < records.length; j++) { NdefRecord record = records[j]; // TODO Process the individual records. } } }
@Override protected Void doInBackground(Void... arg0) { int size=msg.toByteArray().length;
/** * Parse single record. * * @param record record to parse * @return corresponding {@link Record} subclass - or null if not known * @throws FormatException if known record type cannot be parsed * @throws IllegalArgumentException if zero or more than one record */ protected static Record parse(byte[] record) throws FormatException { NdefMessage message = new NdefMessage(record); if(message.getRecords().length != 1) { throw new IllegalArgumentException("Single record expected"); } return Record.parse(message.getRecords()[0]); }
/** * Convert record to bytes. * * @return record in byte form as it was an {@link NdefMessage} with a single record. */ @SuppressLint("NewApi") public byte[] toByteArray() { if (android.os.Build.VERSION.SDK_INT >= 16) { return new NdefMessage(getNdefRecord()).toByteArray(); } else { return new NdefMessage(new NdefRecord[]{getNdefRecord()}).toByteArray(); } }
int messageSize = message.toByteArray().length; if (messageSize > ndefMaxSize) { NdefMessage newMessage = new NdefMessage(new NdefRecord[]{message.getRecords()[0]}); int newMessageSize = newMessage.toByteArray().length; if (newMessageSize > ndefMaxSize) { Log.w(TAG, "Tag too small");
/** * 读取NFC标签文本数据 */ private void readNfcTag(Intent intent) { if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { Parcelable[] rawMsgs = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage msgs[] = null; int contentSize = 0; if (rawMsgs != null) { msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i]; contentSize += msgs[i].toByteArray().length; } } try { if (msgs != null) { NdefRecord record = msgs[0].getRecords()[0]; String textRecord = parseTextRecord(record); mTagText += textRecord + "\n\ntext\n" + contentSize + " bytes"; } } catch (Exception e) { } } }
//here we make some sample transmissions that we convert to work out the max length of data we can send int test_payload_len = 300; //need to make this >255 to ensure the longer length field format is used NdefMessage testDeviceNdef = new NdefMessage(NdefRecord.createExternal(CommandConsts.deviceDomain, CommandConsts.deviceType, test_data)); //the domain and type strings are defined elsewhere NdefMessage testTerminalNdef = new NdefMessage(NdefRecord.createExternal(CommandConsts.terminalDomain, CommandConsts.terminalType, test_data)); maxNdefDeviceSendLength = ndefTag.getMaxSize() - (testDeviceNdef.getByteArrayLength() - test_payload_len); maxNdefTerminalSendLength = ndefTag.getMaxSize() - (testTerminalNdef.getByteArrayLength() - test_payload_len)
NdefRecord[] record = mesg.getRecords()[0]; byte[] type = record.getType(); n = new NdefMessage(payload); } catch (FormatException e) { return; // not an NDEF message, we're done NdefRecord[] recs = n.getRecords(); byte[] act = { 'a', 'c', 't' }; for (NdefRecord r : recs) {
@Override public NdefRecord getNdefRecord() { NdefRecord[] ndefRecords = new NdefRecord[records.size()]; for(int i = 0; i < records.size(); i++) { ndefRecords[i] = records.get(i).getNdefRecord(); } return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, type, id != null ? id : EMPTY, new NdefMessage(ndefRecords).toByteArray()); } }
/** * 读取NFC标签Uri */ private void readNfcTag(Intent intent) { if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { Parcelable[] rawMsgs = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage ndefMessage = null; int contentSize = 0; if (rawMsgs != null) { if (rawMsgs.length > 0) { ndefMessage = (NdefMessage) rawMsgs[0]; contentSize = ndefMessage.toByteArray().length; } else { return; } } try { NdefRecord ndefRecord = ndefMessage.getRecords()[0]; Log.i("JAVA", ndefRecord.toString()); Uri uri = parse(ndefRecord); Log.i("JAVA", "uri:" + uri.toString()); mTagText += uri.toString() + "\n\nUri\n" + contentSize + " bytes"; } catch (Exception e) { } } }
/** * Return this NDEF Message as raw bytes.<p> * The NDEF Message is formatted as per the NDEF 1.0 specification, * and the byte array is suitable for network transmission or storage * in an NFC Forum NDEF compatible tag.<p> * This method will not chunk any records, and will always use the * short record (SR) format and omit the identifier field when possible. * * @return NDEF Message in binary format * @see getByteArrayLength */ public byte[] toByteArray() { int length = getByteArrayLength(); ByteBuffer buffer = ByteBuffer.allocate(length); for (int i=0; i<mRecords.length; i++) { boolean mb = (i == 0); // first record boolean me = (i == mRecords.length - 1); // last record mRecords[i].writeToByteBuffer(buffer, mb, me); } return buffer.array(); }
@Override public NdefMessage createNdefMessage(NfcEvent arg0) { NdefRecord uriRecord= new NdefRecord(NdefRecord.TNF_MIME_MEDIA, MIME_TYPE.getBytes(Charset.forName("US-ASCII")), new byte[0], beamFragment.getUrl() .getBytes(Charset.forName("US-ASCII"))); NdefMessage msg= new NdefMessage( new NdefRecord[] { uriRecord, NdefRecord.createApplicationRecord("com.commonsware.android.webbeam") }); return(msg); } }
void readFromTag(Intent i) { Parcelable[] msgs= (Parcelable[])i.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (msgs.length > 0) { NdefMessage msg=(NdefMessage)msgs[0]; if (msg.getRecords().length > 0) { NdefRecord rec=msg.getRecords()[0]; secretMessage.setText(new String(rec.getPayload(), US_ASCII)); } } }
private Uri toUri(boolean inSmartPoster) { switch (mTnf) { case TNF_WELL_KNOWN: if (Arrays.equals(mType, RTD_SMART_POSTER) && !inSmartPoster) { try { // check payload for a nested NDEF Message containing a URI NdefMessage nestedMessage = new NdefMessage(mPayload); for (NdefRecord nestedRecord : nestedMessage.getRecords()) { Uri uri = nestedRecord.toUri(true); if (uri != null) { return uri; } } } catch (FormatException e) { } } else if (Arrays.equals(mType, RTD_URI)) { Uri wktUri = parseWktUri(); return (wktUri != null ? wktUri.normalizeScheme() : null); } break; case TNF_ABSOLUTE_URI: Uri uri = Uri.parse(new String(mType, Charset.forName("utf-8"))); return uri.normalizeScheme(); case TNF_EXTERNAL_TYPE: if (inSmartPoster) { break; } return Uri.parse("vnd.android.nfc://ext/" + new String(mType, Charset.forName("US-ASCII"))); } return null; }
@Override public NdefRecord getNdefRecord() { // implementation note: write alternative carriers and error record together List<NdefRecord> records = new ArrayList<NdefRecord>(); if (hasAlternativeCarriers()) { // n alternative carrier records for(Record record : alternativeCarriers) { records.add(record.getNdefRecord()); } } if (hasError()) { // an error message records.add(error.getNdefRecord()); } byte[] subPayload = new NdefMessage(records.toArray(new NdefRecord[records.size()])).toByteArray(); byte[] payload = new byte[subPayload.length + 1]; // major version, minor version payload[0] = (byte)((majorVersion << 4) | minorVersion); System.arraycopy(subPayload, 0, payload, 1, subPayload.length); return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_HANDOVER_SELECT, id != null ? id : EMPTY, payload); } }
@Override protected Void doInBackground(Void... arg0) { int size=msg.toByteArray().length;
void writeToTag(Intent i) { Tag tag=i.getParcelableExtra(NfcAdapter.EXTRA_TAG); NdefMessage msg= new NdefMessage(new NdefRecord[] { buildNdefRecord() }); new WriteTagTask(this, msg, tag).execute(); }
private void handleIntent(Intent i) { if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(i.getAction())) { Parcelable[] rawMsgs= i.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage msg=(NdefMessage)rawMsgs[0]; String url=new String(msg.getRecords()[0].getPayload()); beamFragment.loadUrl(url); } }
/** * Configures the {@link mobisocial.nfc.Nfc} interface to set up a Bluetooth * socket with another device. The method both sets the foreground ndef * messages and registers an {@link mobisocial.nfc.NdefHandler} to look for * incoming pairing requests. * * <p>When this method is called, a Bluetooth server socket is created, * and the socket is closed after a successful connection. You must call * prepare() again to reinitiate the server socket. * * @return The server socket listening for peers. */ public static BluetoothServerSocket prepare(Nfc nfc, OnConnectedListener conn, NdefRecord[] ndef) { BluetoothConnecting btConnecting = new BluetoothConnecting(conn); NdefMessage handoverRequest = btConnecting.getHandoverRequestMessage(nfc.getContext()); NdefRecord[] combinedRecords = new NdefRecord[ndef.length + handoverRequest.getRecords().length]; int i = 0; for (NdefRecord r : ndef) { combinedRecords[i++] = r; } for (NdefRecord r : handoverRequest.getRecords()) { combinedRecords[i++] = r; } NdefMessage outbound = new NdefMessage(combinedRecords); nfc.getConnectionHandoverManager().addConnectionHandover(btConnecting); nfc.share(outbound); return btConnecting.mAcceptThread.mmServerSocket; }