2012-11-29 101 views
1

我試圖寫入和讀取/從多個記錄在NDEFMessage。我的代碼是否正確?另外,當我讀取標籤時,我的進程終止。我不知道我哪裏錯了..Android讀/寫多個記錄NDEF NFC

寫作部分:

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(); 

        } 
+0

UPDATE,我已經成功地得到它沒有錯誤的工作,但,爲什麼我只看到ELLO,而不是對你好二號記錄?有任何解決這個問題的方法嗎?它讀起來非常慢,就像字母表中的字母表一樣。吐司消息顯示e(幾秒)l(幾秒)l(幾秒)o ...沒有h並且非常慢。有任何想法嗎?謝謝! – JCDrew90

+1

試試這個:http://code.google.com/p/ndef-tools-for-android/ – ThomasRS

回答

2

你即H. 跳過第一個字節在第一記錄您預先寫入的一個字節,您在閱讀時可以正確跳過。

至於速度我那只是操作系統緩衝祝酒詞

+0

啊謝謝你!我已經發現了這個錯誤,但是關心解釋預先未決的部分? – JCDrew90

相關問題