마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

혹시 nfc 개발 해보신분 계신가요?

0 추천

nfc 개발 해보신분 중에 저랑 같은 문제 겪으신분 있을지 모르겠네요.

 

onNewIntent 부분에 다음과 같이 코드를 넣었는데 rawMsgs가 null로만 들어오네요.

Parcelable[] rawMsgs = passedIntent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
		if(rawMsgs==null)
		{
			return;
		}
		
		tv_ScanText.setText(rawMsgs.length + "개 태그 스캔됨");
		tv_ScanText.invalidate();
		NdefMessage[] msgs;
		if(rawMsgs != null)
		{
			msgs = new NdefMessage[rawMsgs.length];
			for(int i=0;i<rawMsgs.length;i++)
			{
				msgs[i] = (NdefMessage) rawMsgs[i];
				showTag(msgs[i]);
			}
		}

 

태그 메세지 push 하는 부분 입니다.

//텍스트 메세지 레코드 생성 함수
	private NdefRecord createTextRecord(String strMsg, Locale locale, boolean encodeInUtf8) {
		// TODO Auto-generated method stub
		
		//언어 설정
		final byte[] langBytes = locale.getLanguage().getBytes(Charsets.US_ASCII);
		
		//언어에 맞게 utf8로 인코딩 할것인지 말것인지
		final Charset utfEncoding = encodeInUtf8 ? Charsets.UTF_8:Charset.forName("UTF-16");
		
		//인코딩 여부 설정을 적용하여 텍스트를 byte배열로 변환
		final byte[] textBytes = strMsg.getBytes(utfEncoding);
		
//		final int utfBit = encodeInUtf8 ? 0 : (1<<7);
		final int utfBit = encodeInUtf8 ? 0 : (17);
		final char status = (char)(utfBit + langBytes.length);
//		final byte[] data = Bytes.concat(new byte[]{(byte)status}, langBytes, textBytes);
		final byte[] data = new byte[1+langBytes.length+textBytes.length];
		data[0] = (byte) status;
		System.arraycopy(langBytes, 0, data, 1, langBytes.length);
		System.arraycopy(textBytes, 0, data, 1+langBytes.length, textBytes.length);
		
		
		//생성한 메세지 객체 리턴(텍스트)
		return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data);
	}

.
.
.

ndefMessage = new NdefMessage(new NdefRecord[]{createTextRecord(sourceMsg, Locale.ENGLISH, true)});
nfcAdapter.enableForegroundNdefPush(this, ndefMessage);

이렇게 했는데 받는쪽에서 string값을 nul로만 받아요... 혹시 같은 문제 해결하신분 있으시면 도와주세요

Development Guy (70,570 포인트) 님이 2014년 6월 27일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...