title: Android : Reading NFC tag in service class
body: <p>I am working on an application where i need to read the data stored in NFC tag, by data i mean is simple integer values as such 0,1,2,3 and so. The functions to read the data from NFC works fine when it's in Activity class but i need to run the application in the background so even when application is not running in foreground i can read the data from the NFC. So i wrote a service class and moved the function from the Activity to the service class. But it didn't work. 
  <br>
  <br></p>
  
  <p>This is the "MainActivity.java" </p>
  
  <pre><code>protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          startService(new Intent(this, MyService.class));
      }
  </code></pre>
  
  <p><strong>startService(new Intent(this, MyService.class));</strong>
  <br>This line starts the service class.
  <br><br>The Service class is "MyService.java"</p>
  
  <pre><code>public class MyService extends Service {
  
      private NfcAdapter mNfcAdapter;
      private PendingIntent mNfcPendingIntent;
      private IntentFilter[] mReadTagFilters;
  
      @Override
      public IBinder onBind(Intent intent) {
          return null;
      }
  
      @Override
      public void onCreate() {
          super.onCreate();
           mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
           mNfcPendingIntent = PendingIntent.getActivity(this, 0, new
           Intent(this,
           getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
           | Intent.FLAG_ACTIVITY_CLEAR_TOP), 0); 
           IntentFilter ndefDetected = new IntentFilter(
           NfcAdapter.ACTION_NDEF_DISCOVERED);
           ndefDetected.addDataScheme("http");
           IntentFilter techDetected = new IntentFilter(
           NfcAdapter.ACTION_TECH_DISCOVERED);    
           mReadTagFilters = new IntentFilter[] { ndefDetected, techDetected };    
              Log.v("service", "return from onCreate function");
      }
  
      @Override
      public void onDestroy() {
          super.onDestroy();
      }
  
      @Override
      @Deprecated
      public void onStart(Intent intent, int startId) {
          super.onStart(intent, startId);
  
  
          Log.v("service", "onStart function");
          if (mNfcAdapter != null) {
              if (!mNfcAdapter.isEnabled()) {
                  new AlertDialog.Builder(this)
                          .setTitle("NFC Dialog")
                          .setMessage("Please switch on NFC")
                          .setPositiveButton("Settings",
                                  new DialogInterface.OnClickListener() {
                                      public void onClick(DialogInterface arg0,
                                              int arg1) {
                                          Intent setnfc = new Intent(
                                                  Settings.ACTION_WIRELESS_SETTINGS);
                                          startActivity(setnfc);
                                      }
                                  })
                          .setOnCancelListener(
                                  new DialogInterface.OnCancelListener() {
                                      public void onCancel(DialogInterface dialog) {
                                          dialog.dismiss(); 
                                      }
                                  }).create().show();
              }
              mNfcAdapter.enableForegroundDispatch (MainActivity.mContext, mNfcPendingIntent,
                      mReadTagFilters, null);
          } else {
              Toast.makeText(this,
                      "Sorry, NFC adapter not available on your device.",
                      Toast.LENGTH_SHORT).show();
          }
          Log.v("service", "return fonStart function");
      }
  
  }
  </code></pre>
  
  <p>In this the <strong>onCreate()</strong> function is running fine. The problem is this line :<br></p>
  
  <pre><code> mNfcAdapter.enableForegroundDispatch (mContext, mNfcPendingIntent,
                      mReadTagFilters, null);
  </code></pre>
  
  <p>The first argument of the function accepts the context of an Activity and this is where i am stuck.
  Is there any way to solve this or any alternative. Thankyou for your help.</p>