2 Replies Latest reply on Feb 20, 2018 3:41 AM by Prakhar Srivastava

    onNewIntent not called for TC56.

    Prakhar Srivastava

      I am trying to get the Scanner value via intent filter.

      First of all, I have a BaseActivity which is extended by Every other activity, I tried to implement it there, but all I could manage was get the Scanned Value in the EditText.

      onNewIntent() was not called at all.

       

      Now I have exactly same code in two Activities. I get the result in one of the activities and not in other.

      Following is the code that I wrote following the documentation:

       

      private String profileName = "PackageScan";
      private ProfileManager mProfileManager = null;
      private EMDKManager emdkManager = null;

       

      @Override
         protected void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);
         initAddlayout(R.layout.activity_scanner);
         EMDKResults results = EMDKManager.getEMDKManager(getApplicationContext(), this);
        if(results.statusCode == EMDKResults.STATUS_CODE.FAILURE)

        {

         //Failed to create EMDKManager objec
         }

       

      //CRASHES IF I UN-COMMENT THIS

         /* Intent i = getIntent();
        handleDecodeData(i);*/
         }

         @Override
         protected void onDestroy() {

         emdkManager.release();
        super.onDestroy();
         }

         @Override
         public void onOpened(EMDKManager emdkManager) {

         this.emdkManager = emdkManager;
      //Get the ProfileManager object to process the profiles
         mProfileManager = (ProfileManager) emdkManager.getInstance(EMDKManager.FEATURE_TYPE.PROFILE);
        if(mProfileManager != null)

        {

         try{

       

        String[] modifyData = new String[1];
         //Call processPrfoile with profile name and SET flag to create the profile. The modifyData can be null.

         EMDKResults results = mProfileManager.processProfile(profileName, ProfileManager.PROFILE_FLAG.SET, modifyData);
        if(results.statusCode == EMDKResults.STATUS_CODE.FAILURE)

        {

         //Failed to set profile
         }

        }catch (Exception ex){

         // Handle any exception
         }

       

        }

        }

       

         @Override
         public void onClosed() {

       

        }

       

         @Override
         public void onNewIntent(Intent i) {

        handleDecodeData(i);

         }

         private void handleDecodeData(Intent i) {

         if (i.getAction().contentEquals("app.iwiz.mypack.RECVR")) {

        String source = i.getStringExtra("com.motorolasolutions.emdk.datawedge.source");

      //Check if the data has come from the Barcode scanner
         if (source.equalsIgnoreCase("scanner")) {

        String data = i.getStringExtra("com.motorolasolutions.emdk.datawedge.data_string");

      //Check that we have received data
         if (data != null && data.length() > 0) {

        }

        }

        }

        }

       

       

      The Same Code is written in ScannerActivity as well as TrackingListActivity .

       

      When I scan while I am on ScannerActiivty, I immediately get two options to complete the request. One takes me to TrackingListActivity and other brings me to onNewIntent in same ScannerActivity .

      I Understand this behavious is because I am using same Intent-filter and even same EMDK - Profile.

      While on the other hand, when I scan while I am in TrackingListActivity , the onNewIntent doesn't get called. Neither do I get the option to complete request. I get the scanned value in EditText though.

       

      I can't understand how the Context works overall.

      I have 7-8  activities where I have to scan, so I want to get the scanned value to me in the BaseActivity itself.