@Override public boolean supportsRequest(NdefRecord handoverRequest) { if (handoverRequest.getTnf() != NdefRecord.TNF_ABSOLUTE_URI || !Arrays.equals(handoverRequest.getType(), NdefRecord.RTD_URI)) { return false; } String uriString = new String(handoverRequest.getPayload()); if (uriString.startsWith(BT_SOCKET_SCHEMA)) { return true; } return false; }
public static EmptyRecord parse(NdefRecord ndefRecord) { // check that type is zero length byte[] type = ndefRecord.getType(); if(type != null && type.length > 0) { throw new IllegalArgumentException(EmptyRecord.class.getSimpleName() + " type not expected"); } // check that type is zero length byte[] payload = ndefRecord.getPayload(); if(payload != null && payload.length > 0) { throw new IllegalArgumentException(EmptyRecord.class.getSimpleName() + " payload not expected"); } return new EmptyRecord(); }
/** * 处理已知类型的Uri * * @param ndefRecord * @return */ private static Uri parseWellKnown(NdefRecord ndefRecord) { //判断数据是否是Uri类型的 if (!Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_URI)) return null; //获取所有的字节数据 byte[] payload = ndefRecord.getPayload(); String prefix = UriPrefix.URI_PREFIX_MAP.get(payload[0]); byte[] prefixBytes = prefix.getBytes(Charset.forName("UTF-8")); byte[] fullUri = new byte[prefixBytes.length + payload.length - 1]; System.arraycopy(prefixBytes, 0, fullUri, 0, prefixBytes.length); System.arraycopy(payload, 1, fullUri, prefixBytes.length, payload.length - 1); Uri uri = Uri.parse(new String(fullUri, Charset.forName("UTF-8"))); return uri; } }
public static MimeRecord parse(NdefRecord ndefRecord) { String contentType = new String(ndefRecord.getType(), Charset.forName("US-ASCII")); // http://www.ietf.org/rfc/rfc2046.txt return new MimeRecord(contentType, ndefRecord.getPayload()); }
public static boolean isHandoverRequest(NdefMessage ndefMessage) { NdefRecord ndef = ndefMessage.getRecords()[0]; return (ndef.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(ndef.getType(), NdefRecord.RTD_HANDOVER_REQUEST)); } // User-space handover:
public boolean supportsRequest(NdefRecord handoverRequest) { short tnf = handoverRequest.getTnf(); if (tnf != NdefRecord.TNF_ABSOLUTE_URI && (tnf != NdefRecord.TNF_WELL_KNOWN && !Arrays.equals(handoverRequest.getType(), NdefRecord.RTD_URI))) { return false; } Uri uri; try { uri= NdefFactory.parseUri(handoverRequest); } catch (FormatException e) { return false; } String scheme = uri.getScheme(); return (scheme != null && scheme.equals("ndef+tcp")); }
@Override public boolean supportsRequest(NdefRecord handoverRequest) { short tnf = handoverRequest.getTnf(); if (tnf != NdefRecord.TNF_ABSOLUTE_URI && (tnf != NdefRecord.TNF_WELL_KNOWN && !Arrays.equals(handoverRequest.getType(), NdefRecord.RTD_URI))) { return false; } Uri uri; try { uri= NdefFactory.parseUri(handoverRequest); } catch (FormatException e) { return false; } String scheme = uri.getScheme(); return (scheme != null && scheme.equals("ndef+bluetooth")); }
public static final Uri parseUri(NdefRecord record) throws FormatException { int tnf = record.getTnf(); if (tnf == NdefRecord.TNF_ABSOLUTE_URI) { return Uri.parse(new String(record.getType())); } if (tnf == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(NdefRecord.RTD_URI, record.getType())) { byte[] payload = record.getPayload(); int pre = (int)payload[0]; if (!(pre >= 0 && pre < URI_PREFIXES.length)) { throw new FormatException("Unknown uri prefix: " + pre); } String prefix = URI_PREFIXES[pre]; String uriStr = new StringBuilder() .append(prefix).append(new String(payload, 1, payload.length - 1)) .toString(); return Uri.parse(uriStr); } throw new FormatException("NdefRecord is not a uri."); }
public static Record parse(NdefRecord ndefRecord) { /** The value 0x05 (Unknown) SHOULD be used to indicate that the type of the payload is unknown. This is similar to the "application/octet-stream" media type defined by MIME [RFC 2046]. When used, the TYPE_LENGTH field MUST be zero and thus the TYPE field is omitted from the NDEF record. Regarding implementation, it is RECOMMENDED that an NDEF parser receiving an NDEF record of this type, without further context to its use, provides a mechanism for storing but not processing the payload (see section 4.2). */ // check that type is zero length byte[] type = ndefRecord.getType(); if(type != null && type.length > 0) { throw new IllegalArgumentException("Record type not expected"); } return new UnknownRecord(ndefRecord.getPayload()); }
/** * Parse an NDEF message and return the corresponding Wi-Fi configuration * * Source: http://androidxref.com/6.0.1_r10/xref/packages/apps/Nfc/src/com/android/nfc/NfcWifiProtectedSetup.java * * @param message the NDEF message to parse * @return a WifiConfiguration extracted from the NDEF message */ private static WifiConfiguration parse(NdefMessage message) { NdefRecord[] records = message.getRecords(); for (NdefRecord record : records) { if (new String(record.getType()).equals(NFC_TOKEN_MIME_TYPE)) { ByteBuffer payload = ByteBuffer.wrap(record.getPayload()); while (payload.hasRemaining()) { short fieldId = payload.getShort(); short fieldSize = payload.getShort(); if (fieldId == CREDENTIAL_FIELD_ID) { return parseCredential(payload, fieldSize); } else { payload.position(payload.position() + fieldSize); } } } } return null; }
/** * Returns true if the given Ndef message contains a connection * handover request. */ public static int findHandoverRequest(NdefMessage ndef) { NdefRecord[] records = (ndef).getRecords(); for (int i = 0; i < records.length; i++) { if (records[i].getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(records[i].getType(), NdefRecord.RTD_HANDOVER_REQUEST)) { return i; } } return findUserspaceHandoverRequest(ndef); }
if (!Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_TEXT)) { return null;
public UnsupportedRecord(NdefRecord record) { this(record.getTnf(), record.getType(), record.getId(), record.getPayload()); }
public static ExternalTypeRecord parse(NdefRecord ndefRecord) { String domainType = new String(ndefRecord.getType(), Charset.forName("UTF-8"));
public static UnsupportedRecord parse(NdefRecord ndefRecord) { return new UnsupportedRecord(ndefRecord.getTnf(), ndefRecord.getType(), ndefRecord.getId(), ndefRecord.getPayload()); }
byte[] type = ndefRecord.getType(); if(type.length == 1) {