Android Чтение/запись в несколько записей NDEF NFC

Я пытаюсь писать и читать в/из нескольких записей в NDEFMessage. Мой код здесь правильный? Кроме того, мой процесс завершается, когда я читаю тег. Я не уверен, где я ошибся..

Письменная часть:

private NdefMessage getTagAsNdef() {  
           String text123="Hello";
            //boolean addAAR = true;  
            String uniqueId = "starbucks.com";      
         byte[] uriField = uniqueId.getBytes(Charset.forName("US-ASCII"));  
         byte[] payload = new byte[uriField.length + 1];       //add 1 for the URI Prefix  
         payload[0] = 0x01;                        //prefixes http://www. to the URI  
         System.arraycopy(uriField, 0, payload, 1, uriField.length); //appends URI to payload  
         NdefRecord rtdUriRecord = new NdefRecord(  
           NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);  
         //Wi-FI test writing code
         byte[] textbytes = text123.getBytes();
         NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, 
                 text123.getBytes(), new byte[]{}, textbytes);


         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {  
              // note: returns AAR for different app (couponmanager)  
              return new NdefMessage(new NdefRecord[] {  
           rtdUriRecord, textRecord, NdefRecord.createApplicationRecord("com.example.ponpon")  
         });   
         } else {  
              return new NdefMessage(new NdefRecord[] {  
                   rtdUriRecord,textRecord});  
         }  
       }  

Часть чтения:

@Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);      
            SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
            int storedPreference = preferences.getInt("storedInt", 0);

            if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
                NdefMessage[] messages = null;
                Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
                if (rawMsgs != null) {
                    messages = new NdefMessage[rawMsgs.length];
                    for (int i = 0; i < rawMsgs.length; i++) {
                        messages[i] = (NdefMessage) rawMsgs[i];
                    }
                }
                if(messages[0] != null) {
                    String result="";
                    byte[] payload = messages[0].getRecords()[0].getPayload();



                    // this assumes that we get back am SOH followed by host/code
                    for (int b = 1; b<payload.length; b++) { // skip SOH
                        result += (char) payload[b];
                    }


                    //grabbing 2nd payload
                    String result2="";
                    byte[] payload2 = messages[0].getRecords()[1].getPayload();
                    for (int test = 1; test<payload2.length; test++) { // skip SOH
                        result2 += (char) payload2[test];
                        Toast.makeText(this,result2,Toast.LENGTH_SHORT).show();  

                    }

person JCDrew90    schedule 29.11.2012    source источник
comment
ОБНОВЛЕНИЕ, мне удалось заставить его работать без ошибок, НО, почему я вижу только ello вместо Hello для 2-й записи? Есть ли способ исправить это? и читается очень медленно, как по алфавиту. всплывающее сообщение показывает e (несколько секунд) l (несколько секунд) l (несколько секунд) o.. без h и очень медленно. Любые идеи? Спасибо!   -  person JCDrew90    schedule 30.11.2012
comment
попробуйте это: code.google.com/p/ndef-tools-for- андроид   -  person ThomasRS    schedule 13.12.2012


Ответы (1)


Вы пропускаете первый байт, то есть H. В первой записи вы добавляете байт, который правильно пропускаете при чтении.

Что касается скорости, то это всего лишь ОС, буферизующая тосты.

person MrChaz    schedule 29.11.2012
comment
Ах, спасибо! Я уже нашел ошибку, но нужно ли объяснять предыдущую часть? - person JCDrew90; 30.11.2012