android - Why does NFC not working for my app right after installation? -


i using ndeftools library communicate nfc hardware. works fine except 1 issue right after app installed, nfc doesn't seem want return anything. makes nfc sound scanning nfc tag, nothing else happens. if exit app , scan tag, native nfc app activated usual. once device restarted, nfc function restored app on. wondering if has ran issue. appreciated.

edit: i'm including code use interface nfc library. reading tags, use enableforegroundmode() , works part except 1 scenario right after install. there more should doing?

public class nfchelper {      private final string tag = nfchelper.class.getsimplename();      protected nfcadapter m_nfcadapter;     protected pendingintent m_nfcpendingintent;      private context m_context = null;      public nfchelper(context p_context) {         m_context = p_context;          m_nfcadapter = nfcadapter.getdefaultadapter(m_context);         m_nfcpendingintent = pendingintent.getactivity(m_context, 0, new intent(m_context, m_context.getclass()).addflags(intent.flag_activity_single_top), 0);     }      public void disableforegroundmode() {         log.i(tag, "disableforegroundmode");          m_nfcadapter.disableforegrounddispatch((activity) m_context);     }      public void enableforegroundmode() {         log.i(tag, "enableforegroundmode");          // foreground mode gives current active application priority reading scanned tags         intentfilter tagdetected = new intentfilter(nfcadapter.action_tag_discovered); // filter tags         intentfilter[] writetagfilters = new intentfilter[] {tagdetected};         m_nfcadapter.enableforegrounddispatch((activity) m_context, m_nfcpendingintent, writetagfilters, null);     }      public nfcadapter getnfcadapter() {         return m_nfcadapter;     }      public simpleentry<string, string> getnfcdata(intent p_intent) {         log.i(tag, "getnfcdata");          byte[] arrtagserial = null;         string stagserial = "";         string stagcontent = "";          try {             // check nfc related actions             if (nfcadapter.action_tag_discovered.equals(p_intent.getaction())) {                 arrtagserial = p_intent.getbytearrayextra(nfcadapter.extra_id);                 stagserial = new biginteger(arrtagserial).tostring(16);                  parcelable[] messages = p_intent.getparcelablearrayextra(nfcadapter.extra_ndef_messages);                 if (messages != null) {                     log.d(tag, "found " + messages.length + " ndef messages");                     //vibrate();                      // parse records                     (int = 0; < messages.length; i++) {                         try {                             list<record> records = new message((ndefmessage)messages[i]);                              log.d(tag, "found " + records.size() + " records in message " + i);                              for(int k = 0; k < records.size(); k++) {                                 log.d(tag, " record #" + k + " of class " + records.get(k).getclass().getsimplename());                                  record record = records.get(k);                                 if (record instanceof textrecord) {                                     textrecord txtrecord = (textrecord) records.get(k);                                     stagcontent = txtrecord.gettext();                                 }                                 else if(record instanceof androidapplicationrecord) {                                     androidapplicationrecord aar = (androidapplicationrecord)record;                                     log.d(tag, "package " + aar.getpackagename());                                 }                             }                         }                          catch (exception e) {                             log.e(tag, "problem parsing message", e);                         }                      }                 }             } else {                 // ignore             }         }         catch (exception ex) {             ex.printstacktrace();         }          return new simpleentry<string, string>(stagserial, stagcontent);     }      public boolean writetext(string text, intent intent) {         message message = new message();         org.ndeftools.wellknown.textrecord textrecord = new org.ndeftools.wellknown.textrecord();          try {             textrecord.settext(text);             textrecord.setencoding(charset.forname("utf-8"));             textrecord.setlocale(locale.english);              message.add(textrecord);             return writemessage(message, intent);         }         catch (exception ex) {             ex.printstacktrace();             return false;         }     }      public boolean writemessage(message message, intent intent) {         return writemessage(message.getndefmessage(), intent);     }      public boolean writemessage(ndefmessage rawmessage, intent intent) {         tag tag = intent.getparcelableextra(nfcadapter.extra_tag);          ndefformatable format = ndefformatable.get(tag);         if (format != null) {             log.d(tag, "write unformatted tag");             try {                 format.connect();                 format.format(rawmessage);                  //writendefsuccess();                  return true;             }              catch (exception e) {                 //writendeffailed(e);             }              {                 try {                     format.close();                 }                  catch (ioexception e) {                     // ignore                 }             }             log.d(tag, "cannot write unformatted tag");         }          else {             ndef ndef = ndef.get(tag);             if (ndef != null) {                 try {                     log.d(tag, "write formatted tag");                      ndef.connect();                     if (!ndef.iswritable()) {                         log.d(tag, "tag not writeable");                          //writendefnotwritable();                          return false;                     }                      if (ndef.getmaxsize() < rawmessage.tobytearray().length) {                         log.d(tag,                                 "tag size small, have "                                         + ndef.getmaxsize() + ", need "                                         + rawmessage.tobytearray().length);                          //writendeftoosmall(rawmessage.tobytearray().length, ndef.getmaxsize());                          return false;                     }                     ndef.writendefmessage(rawmessage);                      //writendefsuccess();                      return true;                 }                  catch (exception e) {                     //writendeffailed(e);                 }                  {                     try {                         ndef.close();                     }                      catch (ioexception e) {                         // ignore                     }                 }             }              else {                 //writendefcannotwritetech();             }             log.d(tag, "cannot write formatted tag");         }          return false;     }      public int getmaxndefsize(intent intent) {         tag tag = intent.getparcelableextra(nfcadapter.extra_tag);          ndefformatable format = ndefformatable.get(tag);         if (format != null) {             log.d(tag, "format tag empty message");             try {                 if (!format.isconnected()) {                     format.connect();                 }                 format.format(new ndefmessage(new ndefrecord[0]));             }              catch (exception e) {                 log.d(tag, "problem checking tag size", e);                  return -1;             }         }          ndef ndef = ndef.get(tag);         if (ndef != null) {             try {                 if (!ndef.isconnected()) {                     ndef.connect();                 }                  if (!ndef.iswritable()) {                     log.d(tag, "capacity of non-writeable tag zero");                      //writendefnotwritable();                      return 0;                 }                  int maxsize = ndef.getmaxsize();                  ndef.close();                  return maxsize;             }              catch (exception e) {                 log.d(tag, "problem checking tag size", e);             }         }          else {             //writendefcannotwritetech();         }         log.d(tag, "cannot size of tag");          return -1;     } } 

edit2: here code of activity uses nfchelper:

private nfchelper mnfc = new nfchelper(this);  @override public void onnewintent(intent intent) {     simpleentry<string, string> nfcdata = null;      // if intent nfc tag scan     if (intent.getaction() != null &&          intent.getaction().equals(nfcadapter.action_tag_discovered)) {           nfcdata = mnfc.getnfcdata(intent);          // stuff nfc data     } }  @override protected void onresume() {     super.onresume();     mnfc.enableforegroundmode(); }  @override protected void onpause() {      super.onresume();     mnfc.disableforegroundmode(); } 


Comments

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

jsf - How to ajax update an item in the footer of a PrimeFaces dataTable? -

django - CSRF verification failed. Request aborted. CSRF cookie not set -