2012-12-11 3 views
0

2 개의 Android 애플리케이션을 개발했습니다. 첫 번째는 NFC 태그에 쓰고, 두 번째는 작성한 내용을 읽습니다. NDEF 레코드를 NDEF 메시지에 숨기시겠습니까?

내가 (ReadNFC) 첫 번째 응용 프로그램 (WriteNFC)

private NdefRecord createRecord1(String data) 
{ 
byte[] payload = data.getBytes(Charset.forName("UTF-8")); 
byte[] empty = new byte[] {}; 
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, empty, empty, payload); 
} 
private NdefRecord createRecord2(String data) 
{ 
byte[] payload = data.getBytes(Charset.forName("UTF-8")); 
byte[] empty = new byte[] {}; 
return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, empty, empty); 
} 

에 그리고 두 번째 응용 프로그램에서했던 것입니다 내 자신의 응용 프로그램 (ReadNFC) 읽을

NdefRecord cardRecord = msg.getRecords()[1];//Extract the second Record 
String url_data = new String(cardRecord.getType());//Read data type 

의 물론 "Record Type"을 통해 저장 한 두 번째 레코드의 페이로드 만 화면에 표시했습니다. 그러나 사진에 표시된 네이티브 응용 프로그램 (특히 "태그")을 사용하면 올바르게 첫 번째 레코드가 표시되고 두 번째 레코드는 빈 필드가됩니다. 이 필드를 숨기려면 어떻게해야합니까? 그렇지 않으면 다른 타사 응용 프로그램에서 두 번째 레코드를 읽지 않도록하려면 어떻게해야합니까?

enter image description here

답변

3

당신은 단순히 그렇게 할 수 없습니다. Android는 전체 NDEF 메시지 (예 : 모든 기록)를 읽고 인 텐트에서 앱으로 전달합니다.

0

Upps, 이것이 이상한 일이 아니며 코드를 살펴보십시오. 먼저

return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, empty, empty, payload); 

return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, empty, empty); 

그래서 제 3 자 애플리케이션이 정말로 올바른 데이터를 보여주고있다, 당신은 당신의 기록 작성에 버그가 있습니다.

안드로이드의 네이티브 NDEF 지원은 다소 원시적입니다 (바이트 배열 기반). 따라서 재미있는 레코드를 만드는 데 도움이되는 library을 작성했습니다. 위의 문제는 해결하기가 쉽지만 훨씬 더 복잡한 레코드 유형이 있으므로 도움이 필요할 수도 있습니다 .-)

편집 : 선호하는 결과 인 경우 알 수없는 레코드를 만들고 페이로드로 '비밀'데이터를 넣으십시오. 타사 앱에서 해당 데이터를 표시하는 좋은 방법이 아닙니다. 반면 절대 URI 레코드의 ID는 확실히 NDEF 읽기 앱 (예 : mine)에서 표시 할 수 있습니다.

+0

내 응용 프로그램의 Thomas에게 버그가 없습니다. 페이로드를 레코드 유형으로 선택하고 페이로드 필드에서 비워두기 만합니다. [보시다시피, getPayload()가 아닌 getType()을 사용하고 있습니다. 이렇게하면 타사 응용 프로그램이 빈 필드를 표시합니다. 정확히 내가 원하는 것은 아니지만 적어도 두 번째 레코드 대신 빈 필드가 표시됩니다! – mOmO

+0

확인. 업데이트 된 응답을 참조하십시오. – ThomasRS

+0

나는 이미 Unknown Record를 사용했다. 실제로 제 3 자 응용 프로그램은 두 번째 레코드의 데이터를 표시하지 않습니다. 하지만 TNF_UNKNOWN 레코드를 사용할 때는 유형 필드가 비어 있어야합니다. 결과적으로 타사 응용 프로그램은 "알 수없는 태그 유형"이라는 특정 메시지를 표시합니다. TNF_EXTERNAL_TYPE을 사용할 때와 같은 기능! – mOmO

0

이 타사 응용 프로그램은 나에게 너무 귀찮았습니다. 따라서 foregroundDispatch를 사용하여 수동으로 태그 내용을 읽어야했습니다. 거기에서 자유롭게 읽거나 읽지 않아도됩니다. 이 스 니펫은 OnResume()에서 가져온 것입니다. `

mNfcAdapter.enableForegroundDispatch(this, pendingIntent, 
       intentFiltersArray, techListsArray); 

      Toast.makeText(getApplicationContext(), "TAG disscovered", 
        Toast.LENGTH_LONG).show(); 
      Parcelable[] rawMsgs = getIntent() 
      .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]; 
        setText=new String(msgs[i].getRecords()[0].getPayload()); 
       } 
       mInfoText.setText(setText); 
      } 

     }` 

여기서는 첫 번째 기록의 페이로드를받습니다.

관련 문제