title: android intent.getAction() returning null
body: <p>I've an app that scans qrcodes and nfc tags. when I scan a qrcode I create an intent, put some strings in as extras(contents of qrcode), set the <code>setAction</code> to <code>com.carefreegroup.QRCODE_ACTION</code>, which is a custom action and then call <code>startActivity(intent)</code>.</p>
  
  <p>In the receiving activity the <code>intent.getAction()</code> is returning null. I've set an intent filter for the receiving activity in the manifest with an action the same as the calling activity. </p>
  
  <p>Why is the getAction null?</p>
  
  <pre><code>public static final String CUSTOM_QRCODE_ACTION = "com.carefreegroup.QRCODE_ACTION";
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          setContentView(R.layout.qrloggedinmain);
          nfcscannerapplication = (NfcScannerApplication) getApplication();
  
          ////////////////////////get company options///////////////////////////////
          SharedPreferences appSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
          tagTouchInterval = appSharedPrefs.getString("10", null);
          Long tagtouchinteval = new Long(tagTouchInterval);
          companyOptionTime = 1000* 60 * tagtouchinteval ;
  
          Button ScanQrCode = (Button)findViewById(R.id.buttonqrscanner);
  
          ScanQrCode.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
                  Log.e(TAG, "onclicked scan");
  
                  Intent intent = new Intent(
                          "com.google.zxing.client.android.SCAN");
                  intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
  
                  startActivityForResult(intent, 0);
  
              }
          });
  
  
      }// end of onCreate
  
  
      public void onActivityResult(int requestCode, int resultCode, Intent intent) {
          Log.e(TAG, "in onActivityResult");
          if (requestCode == 0) {
              if (resultCode == RESULT_OK) {
                  Log.e(TAG, "result ok");
                  ///////////////////////////////
                  tagScanTime  = new DateTime();
                  thirtySecsAgo = tagScanTime.minus(30000);
                  DateTimeFormatter df = DateTimeFormat.forPattern("dd/MMM/yy h:mmaa");
                  String formattedScanTime = df.print(tagScanTime);
                  Log.e(TAG, "formatted tag scan time = " + formattedScanTime);
                  String formattedthirtysecsAgoTime = df.print(thirtySecsAgo);
                  Log.e(TAG, "formatted thity secs ago time = " + formattedthirtysecsAgoTime);
  
  
                  String contents = intent.getStringExtra("SCAN_RESULT");
                  Toast.makeText(this, "scanner has found " + contents,
                          Toast.LENGTH_LONG).show();
  
  
                  String[] splitPayload = contents.split("@");
  
  
                  type = splitPayload[0];
                  compId = splitPayload[1];
                  personId = splitPayload[2];
                  personName = splitPayload[3];
  
                  Intent QRDataIntent = new Intent(this,
                          NfcscannerActivity.class);
  
                  intent.putExtra("type", type);
                  intent.putExtra("compId", compId);
                  intent.putExtra("personId", personId);
                  intent.putExtra("personName", personName);
                  intent.setAction(CUSTOM_QRCODE_ACTION);
                  intent.setType("text/plain");
                  startActivity(QRDataIntent);
  </code></pre>
  
  <p>.</p>
  
  <pre><code>String intentAction = intent.getAction();
  
   if ( intentAction.equalsIgnoreCase(QRCODE_ACTION)) {
  
              Log.e(TAG, "QR Code scanned");
              String _type = intent.getStringExtra("type");
              String _compId = intent.getStringExtra("compId");
              String _personId = intent.getStringExtra("personId");
              String _personName = intent.getStringExtra("personName");
  
              Log.e(TAG, "payload = " + _type + " " + _compId + " " + _personId + " " + _personName);
  </code></pre>
  
  <p>.</p>
  
  <pre><code> &lt;activity android:name=".NfcscannerActivity"  &gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
  
                  &lt;category android:name="android.intent.category.DEFAULT" /&gt;
  
                  &lt;data android:mimeType="text/plain" /&gt;
              &lt;/intent-filter&gt;
  
              &lt;intent-filter&gt;
                  &lt;action android:name="com.carefreegroup.QRCODE_ACTION" /&gt;
  
                  &lt;category android:name="android.intent.category.DEFAULT" /&gt;
  
                  &lt;data android:mimeType="text/plain" /&gt;
  
  
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
  </code></pre>
  
  <p><strong>[UPDATE1]</strong>
  This is the whole activity that uses the ZXing library to scan the qrcode. It then sets the captured data in the intent as extras, then explicitly calls the next activity with startActivity().</p>
  
  <pre><code>package com.carefreegroup;
  
  import org.joda.time.DateTime;
  import org.joda.time.format.DateTimeFormat;
  import org.joda.time.format.DateTimeFormatter;
  
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.content.ContentValues;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.content.SharedPreferences;
  import android.database.Cursor;
  import android.os.Bundle;
  import android.preference.PreferenceManager;
  import android.util.Log;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.EditText;
  import android.widget.Toast;
  
  public class QrLoggedIn extends Activity{
  
      private static final String TAG = QrLoggedIn.class.getSimpleName();
      private NfcScannerApplication nfcscannerapplication;
      private String tagTouchInterval;
      private long companyOptionTime;
      private DateTime tagScanTime;
      private DateTime thirtySecsAgo;
      private Boolean carerLoggedIn;
      private String type;
      private String personId;
      private String personName;
      private String compId;
      private Cursor cursor;
      static final String CARER_TYPE = "2";  
      static final String CLIENT_TYPE = "1";
      private final String IN = "in";
      private final String OUT = "out";
      private ContentValues values;
      public static final String CUSTOM_QRCODE_ACTION = "com.carefreegroup.QRCODE_ACTION";
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          setContentView(R.layout.qrloggedinmain);
          nfcscannerapplication = (NfcScannerApplication) getApplication();
  
          ////////////////////////get company options///////////////////////////////
          SharedPreferences appSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
          tagTouchInterval = appSharedPrefs.getString("10", null);
          Long tagtouchinteval = new Long(tagTouchInterval);
          companyOptionTime = 1000* 60 * tagtouchinteval ;
  
          Button ScanQrCode = (Button)findViewById(R.id.buttonqrscanner);
  
          ScanQrCode.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
                  Log.e(TAG, "onclicked scan");
  
                  Intent intent = new Intent(
                          "com.google.zxing.client.android.SCAN");
                  intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
  
                  startActivityForResult(intent, 0);
  
              }
          });
  
  
      }// end of onCreate
  
  
      public void onActivityResult(int requestCode, int resultCode, Intent intent) {
          Log.e(TAG, "in onActivityResult");
          if (requestCode == 0) {
              if (resultCode == RESULT_OK) {
                  Log.e(TAG, "result ok");
                  ///////////////////////////////
                  tagScanTime  = new DateTime();
                  thirtySecsAgo = tagScanTime.minus(30000);
                  DateTimeFormatter df = DateTimeFormat.forPattern("dd/MMM/yy h:mmaa");
                  String formattedScanTime = df.print(tagScanTime);
                  Log.e(TAG, "formatted tag scan time = " + formattedScanTime);
                  String formattedthirtysecsAgoTime = df.print(thirtySecsAgo);
                  Log.e(TAG, "formatted thity secs ago time = " + formattedthirtysecsAgoTime);
  
  
                  String contents = intent.getStringExtra("SCAN_RESULT");
                  Toast.makeText(this, "scanner has found " + contents,
                          Toast.LENGTH_LONG).show();
  
  
                  String[] splitPayload = contents.split("@");
  
  
                  type = splitPayload[0];
                  compId = splitPayload[1];
                  personId = splitPayload[2];
                  personName = splitPayload[3];
  
                  Intent QRDataIntent = new Intent(this,
                          NfcscannerActivity.class);
  
                  intent.putExtra("type", type);
                  intent.putExtra("compId", compId);
                  intent.putExtra("personId", personId);
                  intent.putExtra("personName", personName);
                  intent.setAction(CUSTOM_QRCODE_ACTION);
                  intent.setType("text/plain");
                  startActivity(QRDataIntent);
  
  
  
              } else if (resultCode == RESULT_CANCELED) {
                  // Handle cancel
                  Log.e(TAG, "There's a problem with the scan. Scan result failed");
                  Toast.makeText(this, "There's a problem with the scan. Scan result failed",
                          Toast.LENGTH_LONG).show();
              }
          }
      }
  
  }
  </code></pre>
  
  <p>.</p>
  
  <p>This is a snippet from the receiving activity.</p>
  
  <pre><code>    String intentAction = intent.getAction();
  
      Log.e(TAG, "action of intent = " + intentAction);
  
      if( intentAction.equalsIgnoreCase(NFC_ACTION)){
  
      Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
  
      tagId = bytesToHexString(tag.getId());
  
      if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
  
          Log.e(TAG, "NFC Tag scanned");
          // //////////////////////////////////////////////////////////////////////
          // get the messages from the intent
          Parcelable[] rawMsgs = intent
                  .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
          if (rawMsgs != null) {
              msgs = new NdefMessage[rawMsgs.length];
              for (int i = 0; i &lt; rawMsgs.length; i++) {
                  msgs[i] = (NdefMessage) rawMsgs[i];
              }
          }
      } else {
          Log.e(TAG, "ndef not discovered!!!!!!");
      }
  
      // ////////////////////////////////////////////////////////////////////////////////////
      // process the msgs array
      for (int i = 0; i &lt; msgs.length; i++) {
  
          NdefRecord[] records = msgs[i].getRecords();
          Log.e(TAG, "ndefrecord has a length of " + records.length);
  
          tr = parse(records[i]);
          payload = tr.getText();
  
          Log.e(TAG, "TextRecord.text = " + tr.getText());
  
  
      }
  
      // /////////////////////////////////////////////////// split the payload
      // using delimiter. assign value at position[0] to tagType
      String[] splitPayload = payload.split("¦");
  
  
  
      tagType = splitPayload[0];
      tagCompany = splitPayload[1];
      tagPerson = splitPayload[2];
      tagUserName = splitPayload[3];
  
      }else if ( intentAction.equalsIgnoreCase(QRCODE_ACTION)) {
  
          Log.e(TAG, "QR Code scanned");
          String _type = intent.getStringExtra("type");
          String _compId = intent.getStringExtra("compId");
          String _personId = intent.getStringExtra("personId");
          String _personName = intent.getStringExtra("personName");
  
          Log.e(TAG, "payload = " + _type + " " + _compId + " " + _personId + " " + _personName);
  </code></pre>