android - NFC sending wrong tag/records -
my activity implementing
createndefmessagecallback, onndefpushcompletecallback i'm calling
mnfcadapter.setndefpushmessagecallback(this, this); // register callback listen message-sent success mnfcadapter.setonndefpushcompletecallback(this, this); i've overriden
@override public ndefmessage createndefmessage(nfcevent event) { log.d(tag, "creating massage"); string text = tag + data_splitter + address + data_splitter + user_name; // nachricht vorbereiten. // string text = "hello nfc world!"; ndefrecord record = new ndefrecord(ndefrecord.tnf_mime_media, mime_type.getbytes(), new byte[0], text.getbytes()); ndefrecord[] records = { record }; ndefmessage msg = new ndefmessage(records); return msg; } but when i'm receiving, different records, 2 of them, 1 market uri search application, 1 java package name (i guess). before this, i've used enableforegroundndefpush... etc, without callback, need handle completion of push on both devices.. i've changed way, , not transfer data anymore.
edit:
to make better understandable:
public class nfcactivity extends activity implements createndefmessagecallback, onndefpushcompletecallback { // ================================ member ================================= // speichert den nfc adapter. private nfcadapter mnfcadapter = null; private boolean retrychannel = false; public static final string tag = "nfcactivity"; private static final string data_splitter = "__:data:__"; private static final string mime_type = "application/my.applications.mimetype"; private string address = null; private string user_name = null; // speichert das intent, welches von android mit erkannten tags gefüllt // und die activity weitergeleitet wird. private pendingintent mnfcpendingintent = null; private static final string log_tag = "nfcactivity"; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); address = "something"; user_name = "someone"; // zugriff auf den nfc adapter erhalten. mnfcadapter = nfcadapter.getdefaultadapter(this); mnfcadapter.setndefpushmessagecallback(this, this); mnfcadapter.setonndefpushcompletecallback(this, this); intent intent = new intent(this, getclass()); intent.addflags(intent.flag_activity_single_top); mnfcpendingintent = pendingintent.getactivity(this, 0, intent, 0); } @override protected void onnewintent(intent intent) { if (!nfcadapter.action_ndef_discovered.equals(intent.getaction())) { return; } // nutzdaten des intent auslesen. parcelable[] rawmsgs = intent .getparcelablearrayextra(nfcadapter.extra_ndef_messages); if (rawmsgs == null) { return; } (int = 0; < rawmsgs.length; ++i) { ndefmessage msg = (ndefmessage) rawmsgs[i]; ndefrecord[] records = msg.getrecords(); (ndefrecord record : records) { string text = new string(record.getpayload()); // 1 has wrong content. receive 2 records, 1 market, 1 java packet name (or something) } } } @override protected void onresume() { super.onresume(); // activate receiving of messages mnfcadapter.enableforegrounddispatch(this, mnfcpendingintent, null, null); } @override protected void onpause() { super.onpause(); // deactivate receiving mnfcadapter.disableforegrounddispatch(this); } private void logerror(string msg) { toast.maketext(this, msg, toast.length_long).show(); log.v(log_tag, msg); } @override public void onndefpushcomplete(nfcevent arg0) { log.d(tag, "push complete"); } @override public ndefmessage createndefmessage(nfcevent event) { log.d(tag, "creating massage"); string text = "asdfgh"; // nachricht vorbereiten. // string text = "hello nfc world!"; ndefrecord record = new ndefrecord(ndefrecord.tnf_mime_media, mime_type.getbytes(), new byte[0], text.getbytes()); ndefrecord[] records = { record }; ndefmessage msg = new ndefmessage(records); return msg; } }
i post answer you, can accept it.
the solution wrong mime-type inside android-manifest. must same ndefrecord defines
Comments
Post a Comment