Android NFC, do a null check in onCreate?

家住魔仙堡 提交于 2019-12-04 19:23:48

Hear is a code outline of the basic way I made my first Nfc app. I tried to replace values (I used nfcA instead of nfcV) so you could read it better. It is a very basic structure, and you would need to fill in parts with your own code, but It should give you a good idea of how the structure of an NFC app can work.

public class Android_nfc_ibox extends Activity implements Runnable {




NfcAdapter mNfcAdapter;
private String[][] mTechLists;
PendingIntent pendingIntent;
Tag tag;
NfcA mTag;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Initialize the NFC adapter
    mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
    if (mNfcAdapter != null) {
        dialog_text.append("Tap an NFC tag for access\n\r");
    } else {
        dialog_text.append("This phone is not NFC enabled\n\r");
    }

    // Create the PendingIntent object which will contain the details of the tag that has been scanned
    pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    // Setup a tech list for all desired tag types
    mTechLists = new String[][] { new String[] { NfcA.class.getName() } };

}

    /** Re-enable the tag dispatch if the app is in the foreground */
   @Override
    public void onResume() {
        super.onResume();
        if (mNfcAdapter != null) mNfcAdapter.enableForegroundDispatch(this, pendingIntent, null, mTechLists);
    }

   /** Disable the tag dispatch when the app is no longer in the foreground */
    @Override
    public void onPause() {
        super.onPause();
        if (mNfcAdapter != null) mNfcAdapter.disableForegroundDispatch(this);
    }

    /** A tag has been discovered */
    @Override 
    public void onNewIntent(Intent intent){

        // get the tag object for the discovered tag
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

        // try and get the MifareUltralight instance for this tag
        mTag = NfcV.get(tag);

        // if null then this wasn't a NfcV tag so wait for next time
        if(mTag == null){
            dialog_text.append("Not a Nfc V tag\n\r");
        }

           // Start the tag communications thread
           Thread myThread = new Thread(this);
           myThread.start();

        }
    }

   // (we could create other threads for other types of tags)
   public void run(){
       // try to connect to the Nfc V tag
       try{

           mTag.connect();
       }catch(IOException e){
            //handle the error here
       }

       //this will send raw data
       //send the values you want in the byte[]
       //just add the raw hex values with commas
       //pageBuffer is an array that will hold the response
       try{
           pageBuffer = mTag.transceive(new byte[] {0x11, 0x24, 0x11});
       }catch(IOException e){
            //handle error here
       }
    } 

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!