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로만 받아요... 혹시 같은 문제 해결하신분 있으시면 도와주세요