2013-04-11 4 views
1

Ndef 태그에 이미지를 쓰려고하는데, 현재 그것을 쓸 수는 있지만 시장 애플리케이션으로 읽으려고 할 때 텍스트 메시지처럼 취급합니다. 방법 createMimeRecord와NdefMessage를 사용하여 이미지 작성하기

 NdefMessage msg = new NdefMessage(new NdefRecord[] {createMimeRecord("image/png", byteArray), textRecord}); 

: 나는 또한 이미지를이 방법을 writting tryed

 Bitmap mBitmap = Bitmap.createScaledBitmap(mPhoto, 100, 100, true); 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     mBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
     byte[] byteArray = stream.toByteArray(); 
     NdefRecord picRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, "image/png".getBytes(), null, byteArray); 
     String informations = "name: "+name + "\ntitle: " + title + "\naddress: "+ address + "\ncity: "+ city + "\nphone: "+ phone + "\nmail: "+mail; 
     NdefRecord textRecord = createTextRecord(informations); 
     NdefMessage message = new NdefMessage(new NdefRecord[]{picRecord, textRecord}); 

: 여기

 public NdefRecord createMimeRecord(String mimeType, byte[]payload) { 
     byte[] mimeBytes = mimeType.getBytes(Charset.forName("USASCII")); 
     NdefRecord mimeRecord = new 
     NdefRecord(NdefRecord.TNF_MIME_MEDIA, 
     mimeBytes, new byte[0], payload); 
     return mimeRecord; 
     } 

이 결과 내가 여기 이미지를 작성하는 코드의 내 작품이다 "TagInfo"와 같은 응용 프로그램으로 내 이미지를 읽으려고 할 때 : enter image description here

텍스트 메시지는 잘 쓰여지고 정상적으로 읽을 수 있습니다. "createMime (String mime type, byte [] data)를 사용하려고 시도했으나이 메서드는"undefined "처럼 보입니다. 동일한 결과로 JPEG 형식의 비트 맵 이미지를 압축하려고했습니다. NdefMessages를 통해 이미지를 보내는 예제를 찾았지만 아무 것도 찾지 못했습니다. 어떤 제안?

+0

NFC로 이미지를 전송하는 것이 드문 경우가 있습니다. 전송 속도가 느리고 범위가 매우 낮습니다. 해상도가 높은 이미지는 꽤 큽니다. 이미지를 표시하려면 nfc를 통해받은 이미지를 표시 할 수있는 응용 프로그램을 만드시겠습니까? – damian

+0

내가하려는 것은 NFC 태그를 통해 명함을 저장하고 읽는 응용 프로그램입니다. 나는 그것을 보여주기 위해 다른 응용 프로그램을 사용하고 싶지 않습니다. 사실 NFC 응용 프로그램에서 NdefMessaged를 읽고 내 이미지를 표시하고 싶습니다. – Jinbonka

답변

1

마지막으로 응용 프로그램의 writting 검색 및 NFC 태그에 명함을 읽은 후와 아무것도 찾지 못했다. 나는 내 자신의 종류의 명함을 만들고 그것을 직접 읽는다고 결정했다. 여기

 Bitmap mBitmap = mPhoto; 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     mBitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream); 
     byte[] byteArray = stream.toByteArray(); 
     NdefRecord picRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, "image/jpeg".getBytes(), null, byteArray); 
     String informations = "name: "+name + "\ntitle: " + title + "\naddress: "+ address + "\ncity: "+ city + "\nphone: "+ phone + "\nmail: "+mail + "\n"; 
     NdefRecord textRecord = createTextRecord(informations); 
     NdefMessage message = new NdefMessage(new NdefRecord[]{picRecord, textRecord}); 

와 읽기 부분에 대한 코드입니다 :

 NdefRecord picRecord = records[0]; 
     NdefRecord infoRecord = records[1]; 
     byte[] picload = picRecord.getPayload(); 
     byte[] infoload = infoRecord.getPayload(); 
     Bitmap photo = BitmapFactory.decodeByteArray(picload, 0, picload.length); 
     String textEncoding = ((infoload[0] & 0200) == 0) ? "UTF-8" : "UTF-16"; 
     int languageCodeLength = infoload[0] & 0077; 
     String text = null; 
     try{ 
      String languageCode = new String(infoload, 1, languageCodeLength, "US-ASCII"); 
      text = new String(infoload, languageCodeLength + 1,infoload.length - languageCodeLength - 1, textEncoding); 
     }catch(Exception e){ 
      Alert("String decoding", e.toString()); 
      return; 
     } 

JPEG의 암호화를 잃지 않고 이미지를 압축하는 데 많은 도움이 여기에 내가 NDEF 메시지 사용하여 카드를 작성하는 데 사용되는 코드는 너무 많은 품질. 태그 전송은 2 ~ 3 초가 걸리지 만 솔루션은 잘 작동합니다.

0

유스 케이스가 NFC 태그에 명함을 저장하는 경우 이미지 데이터를 저장하지 말고 그렇지 않으면 정상적인 태그 (일반적인 태그 크기는 1K 또는 4K)에 명함을 저장하는 데 어려움을 겪게되며 데이터 전송 시간도 길어집니다 vCard 사양에 따라 다음 두 가지를 모두 수행 할 수 있습니다. 바이너리 이미지 데이터를 base64 형식으로 저장하고 URL 링크도 제공합니다 (강력히 추천합니다).

자세한 내용 N에서 여기에 vCard를 모양의 형식에 대한 :

http://en.wikipedia.org/wiki/VCard

또는 여기에 자세한 내용에

:

http://tools.ietf.org/html/rfc2426#section-3.1.4

+0

글쎄, 내 태그에 64k의 저장 용량을 가지고 있으므로 문제가되지 않습니다. vCard NdefMessage를 만들려고했지만 실패했습니다. vCard를 쓰고 읽는 방법에 대한 몇 가지 예제 코드가 있습니까? ndef-tools 라이브러리를 사용합니까? – Jinbonka

+0

카드의 유형에 따라 NDEFMessage가 다르게 작성됩니다. 당신이 사용하는 카드의 종류는 무엇입니까? 나는 네가 NDEF를 위해 카드에있는 64K를 모두 사용할 수 있는지 의심 스럽다. 나는 ndef-tools 라이브러리를 사용하지 않았다. –