示例#1
0
  void processIntent(Intent intent) throws UnsupportedEncodingException {
    Parcelable[] msgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    NdefMessage[] nmsgs = new NdefMessage[msgs.length];
    for (int i = 0; i < msgs.length; i++) {
      nmsgs[i] = (NdefMessage) msgs[i];
    }
    NdefRecord record = nmsgs[0].getRecords()[0];
    byte[] payload = record.getPayload();
    if (payload != null) {
      if (nmsgs[0].getRecords()[0].getTnf() != 2) {
        // Toast.makeText(this, "New Text received!", Toast.LENGTH_SHORT)
        //	.show();
        // String message = String.valueOf(record.getPayload());
        String message = getTextData(record.getPayload());
        // textview = (TextView) findViewById(R.id.textView2);
        // Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
        // text = String.valueOf(payload);
        // textview.setText(message);
        Intent intent_nfccode = new Intent(this, Details_page.class);
        intent_nfccode.putExtra("NFC Code", message);

        startActivity(intent_nfccode);
      }
    }
  }
示例#2
0
  private ScanableTag messageToScanable(NdefMessage message) {
    NdefRecord record = message.getRecords()[0];

    // XXX Ignoring the first byte because it contains a flag we are not
    // paying attention to yet
    byte[] rawData = new byte[record.getPayload().length - 1];
    System.arraycopy(record.getPayload(), 1, rawData, 0, rawData.length);

    String text = decodePayload(rawData);

    String mimeType = decodePayload(record.getType());

    return new TagParser().parse(mimeType, text);
  }
示例#3
0
 private void processIntent(Intent intent) {
   Log.d("ANDROID_LAB", "processIntent...");
   Bitmap bitmap = null;
   Parcelable[] ndefMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
   if (ndefMsgs != null) {
     Log.d("ANDROID_LAB", "ndefMsgs.size=" + ndefMsgs.length);
     String str = "";
     for (int i = 0; i < ndefMsgs.length; i++) {
       NdefMessage msg = (NdefMessage) ndefMsgs[i];
       NdefRecord[] records = msg.getRecords();
       if (records != null) {
         Log.d("ANDROID_LAB", "records.size=" + records.length);
         for (int k = 0; k < records.length; k++) {
           NdefRecord record = records[k];
           byte[] data = record.getPayload();
           if (data != null) {
             if (k == 0) {
               str += new String(data);
             } else if (k == 1) {
               bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
             }
           }
         }
       }
     }
     txtPushContent.setText(str);
     if (bitmap != null) {
       txtPushContent.setCompoundDrawablesWithIntrinsicBounds(
           null, null, null, new BitmapDrawable(bitmap));
     }
   }
 }
    private String readText(NdefRecord record) throws UnsupportedEncodingException {
      /*
       * See NFC forum specification for "Text Record Type Definition" at 3.2.1
       *
       * http://www.nfc-forum.org/specs/
       *
       * bit_7 defines encoding
       * bit_6 reserved for future use, must be 0
       * bit_5..0 length of IANA language code
       */

      byte[] payload = record.getPayload();

      // Get the Text Encoding
      String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16";

      // Get the Language Code
      int languageCodeLength = payload[0] & 0063;

      // String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
      // e.g. "en"

      // Get the Text
      return new String(
          payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
    }
  private void readTag(Tag t) {
    // get NDEF tag details
    Ndef ndefTag = Ndef.get(t);

    // get NDEF message details
    NdefMessage ndefMesg = ndefTag.getCachedNdefMessage();
    if (ndefMesg == null) {
      return;
    }
    NdefRecord[] ndefRecords = ndefMesg.getRecords();
    if (ndefRecords == null) {
      return;
    }
    for (NdefRecord record : ndefRecords) {
      short tnf = record.getTnf();
      String type = new String(record.getType());
      if (tnf == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(type.getBytes(), NdefRecord.RTD_URI)) {
        String url = new String(record.getPayload());
        if (url.startsWith(ATTENDEE_URL_PREFIX)) {
          Intent i = new Intent(Intent.ACTION_VIEW);
          i.setData(Uri.parse("https://" + url.substring(1)));
          startActivity(i);
          return;
        }
      }
    }
  }
示例#6
0
  /**
   * Method to send the messages over another device
   *
   * @param NfcIntent - NFC intent to pass data
   */
  private void handleNfcIntent(Intent NfcIntent) {
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(NfcIntent.getAction())) {
      Parcelable[] receivedArray =
          NfcIntent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

      if (receivedArray != null) {
        messagesToReceiveQueue.clear();
        NdefMessage receivedMessage = (NdefMessage) receivedArray[0];
        NdefRecord[] linkRecords = receivedMessage.getRecords();

        for (NdefRecord record : linkRecords) {
          String message = new String(record.getPayload());
          if (!message.equals(getPackageName())) {
            messagesToReceiveQueue.add(message);
          }
        }

        Toast.makeText(
                this,
                "Total " + messagesToReceiveQueue.size() + "Messages received",
                Toast.LENGTH_LONG)
            .show();

        updateTextViews();
      } else {
        Toast.makeText(this, "Received Blank", Toast.LENGTH_LONG).show();
      }
    }
  }
示例#7
0
 public static String parse(NdefRecord record) {
   try {
     byte[] payload = record.getPayload();
     /*
      * payload[0] contains the "Status Byte Encodings" field, per the
      * NFC Forum "Text Record Type Definition" section 3.2.1.
      *
      * bit7 is the Text Encoding Field.
      *
      * if (Bit_7 == 0): The text is encoded in UTF-8 if (Bit_7 == 1):
      * The text is encoded in UTF16
      *
      * Bit_6 is reserved for future use and must be set to zero.
      *
      * Bits 5 to 0 are the length of the IANA language code.
      */
     String textEncoding = ((payload[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
     int languageCodeLength = payload[0] & 0077;
     String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
     String text =
         new String(
             payload,
             languageCodeLength + 1,
             payload.length - languageCodeLength - 1,
             textEncoding);
     return text;
   } catch (UnsupportedEncodingException e) {
     // should never happen unless we get a malformed tag.
     throw new IllegalArgumentException(e);
   }
 }
 public static StringBuilder readdata(NdefMessage[] messages) {
   String payload = new String();
   StringBuilder myText = new StringBuilder();
   if (messages != null)
     for (int i = 0; i < messages.length; i++) {
       // myText.append("Message " + (i + 1) + ":\n");
       for (int j = 0; j < messages[0].getRecords().length; j++) {
         NdefRecord record = messages[i].getRecords()[j];
         int statusByte = record.getPayload()[0];
         int languageCodeLength = statusByte & 0x3F;
         // myText.append("Language Code Length:" +
         // languageCodeLength+ "\n");
         // myText.append("Language Code:" + languageCode + "\n");
         int isUTF8 = statusByte - languageCodeLength;
         if (isUTF8 == 0x00) {
           // myText.append((j + 1) + "th. Record is UTF-8\n");
           payload =
               new String(
                   record.getPayload(),
                   1 + languageCodeLength,
                   record.getPayload().length - 1 - languageCodeLength,
                   Charset.forName("UTF-8"));
         } else if (isUTF8 == -0x80) {
           // myText.append((j + 1) + "th. Record is UTF-16\n");
           payload =
               new String(
                   record.getPayload(),
                   1 + languageCodeLength,
                   record.getPayload().length - 1 - languageCodeLength,
                   Charset.forName("UTF-16"));
         }
         // myText.append((j + 1) + "th. Record Tnf: " +
         // record.getTnf()+ "\n");
         // myText.append((j + 1) + "th. Record type: "+ new
         // String(record.getType()) + "\n");
         // myText.append((j + 1) + "th. Record id: "+ new
         // String(record.getId()) + "\n");
         // myText.append((j + 1) + "th. Record payload: " + payload
         // + "\n");
         myText.append(payload + "\n");
       }
     }
   return myText;
 }
示例#9
0
  /** Parse an well known URI record */
  private static UriRecord parseWellKnown(NdefRecord record) {
    Preconditions.checkArgument(Arrays.equals(record.getType(), NdefRecord.RTD_URI));
    byte[] payload = record.getPayload();

    String prefix = URI_PREFIX_MAP.get(payload[0]);
    byte[] fullUri =
        Bytes.concat(
            prefix.getBytes(Charset.forName("UTF-8")),
            Arrays.copyOfRange(payload, 1, payload.length));
    Uri uri = Uri.parse(new String(fullUri, Charset.forName("UTF-8")));
    return new UriRecord(uri);
  }
示例#10
0
 public String getTextFromNdefRecord(NdefRecord ndefRecord) {
   String tagContent = null;
   try {
     byte[] payload = ndefRecord.getPayload();
     String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16";
     int languageSize = payload[0] & 0063;
     tagContent =
         new String(payload, languageSize + 1, payload.length - languageSize - 1, textEncoding);
   } catch (UnsupportedEncodingException e) {
     Log.e("getTextFromNdefRecord", e.getMessage(), e);
   }
   return tagContent;
 }
示例#11
0
    private String readText(NdefRecord record) throws UnsupportedEncodingException {

      byte[] payload = record.getPayload();

      // Get the Text Encoding
      String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16";

      // Get the Language Code
      int languageCodeLength = payload[0] & 0063;

      // Get the Text
      return new String(
          payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
    }
示例#12
0
 private void printMessage(NdefRecord record) {
   byte[] id; // Id of the record
   short tnf; // TNF: See android.nfc.NdefRecord
   byte[] payload; // Payload of the record (the actual message)
   String finalMessage, id_string;
   id = record.getId();
   tnf = record.getTnf();
   payload = record.getPayload();
   id_string = DataConversion.bytesToASCIIString(id);
   receiveTab.append("\nID is " + id_string);
   receiveTab.append("\nTNF is " + tnf);
   finalMessage = DataConversion.bytesToASCIIString(payload);
   receiveTab.append("\n" + finalMessage + "\n");
 }
示例#13
0
    @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;
    }
示例#14
0
  private String readText(NdefRecord record) throws UnsupportedEncodingException {
    byte[] payload = record.getPayload();

    String textEncoding;
    if ((payload[0] & 128) == 0) {
      textEncoding = "UTF-8";
    } else {
      textEncoding = "UTF-16";
    }

    int languageCodeLength = payload[0] & 0063;

    return new String(
        payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
  }
示例#15
0
 public static String[] readStrings(Tag tag)
     throws IOException, FormatException, NotReadableException {
   Ndef ndefTag = Ndef.get(tag);
   if (ndefTag == null) {
     throw new NotReadableException("The tag doesn't support Ndef tech");
   }
   ndefTag.connect();
   NdefMessage message = ndefTag.getNdefMessage();
   NdefRecord[] records = message.getRecords();
   String[] out = new String[records.length];
   int i = 0;
   for (NdefRecord rec : records) {
     out[i++] = new String(rec.getPayload(), Charset.forName("UTF-8"));
   }
   ndefTag.close();
   return out;
 }
  @Override
  protected void onHandleIntent(Intent intent) {
    intent = (Intent) intent.getExtras().get(NFC_INTENT);

    TimeloggerDatabaseOpenHelper databaseOpenHelper =
        new TimeloggerDatabaseOpenHelper(getApplicationContext());

    Log.d(NFC_TIMELOGGER, "handling following intent in service: " + intent.getAction());

    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {

      Parcelable[] ndefMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

      if (ndefMessages != null) {
        NdefMessage[] msgs = new NdefMessage[ndefMessages.length];
        for (int i = 0; i < ndefMessages.length; i++) {
          msgs[i] = (NdefMessage) ndefMessages[i];

          NdefRecord[] records = msgs[i].getRecords();
          for (NdefRecord ndefRecord : records) {
            String payload = new String(ndefRecord.getPayload());
            Log.d(NFC_TIMELOGGER, payload);
            NotificationManager notifManager =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

            String resultAction = databaseOpenHelper.handleCategory(payload);

            Notification notification =
                new Notification.Builder(this)
                    .setContentTitle("Timelogger")
                    .setTicker(resultAction + payload)
                    .setContentText(payload)
                    .setSmallIcon(R.drawable.ic_launcher)
                    .build();
            notifManager.notify(1234, notification);
            Log.d(NFC_TIMELOGGER, "notification sent");

            Intent updateIntent = new Intent("FRAGMENT_UPDATE");
            this.sendBroadcast(updateIntent);
          }
        }
      }
    }

    databaseOpenHelper.close();
  }
示例#17
0
 private void processIntent(Intent intent) {
   Parcelable[] ndefMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
   NdefMessage msg = (NdefMessage) ndefMessages[0];
   NdefRecord[] records = msg.getRecords();
   for (NdefRecord record : records) {
     String dataString = new String(record.getPayload());
     Scanner scanner = new Scanner(dataString);
     DataContainer dataContainer = new DataContainer();
     for (int i = 0; i < Constants.DATA_NAMES.length; i++) {
       if (Constants.DATA_FIELDS[i].equals("int")) {
         dataContainer.setData(Constants.DATA_NAMES[i], scanner.nextInt());
       } else {
         dataContainer.setData(Constants.DATA_NAMES[i], scanner.nextInt() == 1);
       }
     }
     mDBHelper.insertDataContainer(dataContainer);
   }
 }
示例#18
0
 /**
  * Checks to see if the activity's intent ({@link android.app.Activity#getIntent()}) is an NFC
  * intent that the app recognizes. If it is, then parse the NFC message and set the activity's
  * intent (using {@link android.app.Activity#setIntent(android.content.Intent)}) to something the
  * app can recognize (i.e. a normal {@link android.content.Intent#ACTION_VIEW} intent).
  */
 @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
 public static void tryUpdateIntentFromBeam(Activity activity) {
   if (UIUtils.hasICS()) {
     Intent originalIntent = activity.getIntent();
     if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(originalIntent.getAction())) {
       Parcelable[] rawMsgs =
           originalIntent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
       NdefMessage msg = (NdefMessage) rawMsgs[0];
       // Record 0 contains the MIME type, record 1 is the AAR, if present.
       // In iosched, AARs are not present.
       NdefRecord mimeRecord = msg.getRecords()[0];
       if (ScheduleContract.Sessions.CONTENT_ITEM_TYPE.equals(new String(mimeRecord.getType()))) {
         // Re-set the activity's intent to one that represents session details.
         Intent sessionDetailIntent =
             new Intent(Intent.ACTION_VIEW, Uri.parse(new String(mimeRecord.getPayload())));
         activity.setIntent(sessionDetailIntent);
       }
     }
   }
 }
  /* Called when the activity will start interacting with the user. */
  @Override
  protected void onResume() {
    super.onResume();

    // Double check if NFC is enabled
    checkNfcEnabled();

    Log.d(TAG, "onResume: " + getIntent());

    if (getIntent().getAction() != null) {
      // tag received when app is not running and not in the foreground:
      if (getIntent().getAction().equals(NfcAdapter.ACTION_NDEF_DISCOVERED)) {
        NdefMessage[] msgs = getNdefMessagesFromIntent(getIntent());
        NdefRecord record = msgs[0].getRecords()[0];
        byte[] payload = record.getPayload();
        setTextFieldValues(new String(payload));
      }
    }

    // Enable priority for current activity to detect scanned tags
    // enableForegroundDispatch( activity, pendingIntent,
    // intentsFiltersArray, techListsArray );
    mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, mReadTagFilters, null);
  }
  @Override
  protected void onResume() {
    super.onResume();

    Intent intent = getIntent();
    String action = intent.getAction();
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
      Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
      if (rawMsgs != null) {
        NdefMessage[] msgs = new NdefMessage[rawMsgs.length];
        for (int i = 0; i < rawMsgs.length; i++) {
          msgs[i] = (NdefMessage) rawMsgs[i];
          for (NdefRecord record : msgs[i].getRecords()) {
            String type = new String(record.getType());
            byte[] payload = record.getPayload();
            if (PROFILE_MIME_TYPE.equals(type) && payload != null && payload.length == 16) {
              handleProfileMimeType(payload);
            }
          }
        }
      }
    }
    finish();
  }
示例#21
0
 private static UriRecord parseAbsolute(NdefRecord record) {
   byte[] payload = record.getPayload();
   Uri uri = Uri.parse(new String(payload, Charset.forName("UTF-8")));
   return new UriRecord(uri);
 }