Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Open zxing barcode scanner via intent

Open zxing barcode scanner via intent

Scheduled Pinned Locked Moved Mobile and Embedded
6 Posts 4 Posters 5.6k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • metaDomM Offline
    metaDomM Offline
    metaDom
    wrote on last edited by
    #1

    Hey guys,

    I'd like to start the zxing barcode/qr scanner via an Intent on Android and then receive and parse the result via C++ Qt code.

    https://github.com/zxing/zxing/wiki/Scanning-Via-Intent

    I've made some attempts but for some reason I always just received a whitescreen.

    Could anyone give it a try and share his results?

    The Java code without Qt would be:

    @public Button.OnClickListener mScan = new Button.OnClickListener() {
    public void onClick(View v) {
    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
    intent.setPackage("com.google.zxing.client.android");
    intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
    startActivityForResult(intent, 0);
    }
    };

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
    if (resultCode == RESULT_OK) {
    String contents = intent.getStringExtra("SCAN_RESULT");
    String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
    // Handle successful scan
    } else if (resultCode == RESULT_CANCELED) {
    // Handle cancel
    }
    }
    }@

    Thanks in advance!

    1 Reply Last reply
    0
    • metaDomM Offline
      metaDomM Offline
      metaDom
      wrote on last edited by
      #2

      Ok, I got the QR Scanner to start and can also receive results. Problem now is, I have to pass the results from the Java class to Qt...

      1 Reply Last reply
      0
      • metaDomM Offline
        metaDomM Offline
        metaDom
        wrote on last edited by
        #3

        Current code without java file:

        @ QAndroidJniObject Scanner;
        QAndroidJniObject Package;
        QAndroidJniObject Subject;
        QAndroidJniObject Text;
        QAndroidJniObject intent("android/content/Intent");

        Scanner = QAndroidJniObject::fromString("com.google.zxing.client.android.SCAN");
        Package = QAndroidJniObject::fromString("com.google.zxing.client.android");
        Subject = QAndroidJniObject::fromString("SCAN_MODE");
        Text = QAndroidJniObject::fromString("QR_CODE_MODE");
        intent.callObjectMethod("addAction","(Ljava/lang/String;)Landroid/content/Intent;",Scanner.object<jstring>());
        intent.callObjectMethod("setPackage","(Ljava/lang/String;)Landroid/content/Intent;",Package.object<jstring>());
        intent.callObjectMethod("putExtra","(Ljava/lang/String;Ljava/lang/string;)Landroid/content/Intent;",Subject.object<jstring>(), Text.object<jstring>());
        QtAndroid::startActivity(intent,123456);@
        
        1 Reply Last reply
        0
        • M Offline
          M Offline
          malleeswarareddy
          wrote on last edited by
          #4

          me also facing same problem ,but iam trying like this result code got -1 ,but scanner result showing null.
          class OnActivityResult : public QAndroidActivityResultReceiver
          {
          void handleActivityResult(int requestCode, int resultCode, const QAndroidJniObject & intent)
          {
          qDebug() << "**** " << requestCode << " : " << resultCode << "data" << intent.toString();

                  if (requestCode == 12345)
                  {
                      if (resultCode != 0 && intent.isValid())
                      {
          
                          QAndroidJniObject jPackage;
                          QAndroidJniObject jClass;
                          QAndroidJniObject jresult;
                          QAndroidJniObject jdata;
          
                          jPackage = QAndroidJniObject::fromString("com.google.zxing.client.android");
                          jClass =  QAndroidJniObject::fromString("com.google.zxing.client.android.SCAN");
                          jresult = QAndroidJniObject::fromString("RESULT_OK");
          
          
                          intent.callObjectMethod("setPackage"
                          , "(Ljava/lang/String;)Landroid/content/Intent;"
                          , jPackage.object<jstring>());
          
                          intent.callObjectMethod("setAction"
                          , "(Ljava/lang/String;)Landroid/content/Intent;"
                          , jClass.object<jstring>());
          
          
                          jdata=intent.callObjectMethod("getExtra"
                          , "(Ljava/lang/String;)Landroid/content/Intent;"
                          , jresult.object<jstring>());
                          qDebug() << "DATA:" << jdata.toString() ;
          

          // QAndroidJniObject result =
          // intent.getObjectField<jstring>("SCAN_RESULT");
          // QAndroidJniObject format =
          // intent.getObjectField<jstring>("SCAN_RESULT_FORMAT");

          // qDebug() << result.toString() << " : " << format.toString();
          }
          }
          }
          };

          1 Reply Last reply
          0
          • E Offline
            E Offline
            EvanPan
            Banned
            wrote on last edited by
            #5
            This post is deleted!
            1 Reply Last reply
            0
            • T Offline
              T Offline
              tomaslov
              wrote on last edited by tomaslov
              #6

              Hi,

              I've successfully implemented zxing barcode scanning via intent from Qt. I don't think it's the proper way to do it, but it works.

              I copied QtActivity.java and added some code in onActivityResult to get hold of the return values. I'm quite sure you can do this a cleaner way.

              <code>
              @Override

              protected void onActivityResult(int requestCode, int resultCode, Intent data)    {
                  //Barcode results
                  IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
                  if (result != null)
                  {
                     barcodeData = result.getContents();
                     Log.i(QtApplication.QtTAG, "Barcode activity result: data=" + barcodeData + ", formatName=" + result.getFormatName() + ", errorCorrectionLevel=" + result.getErrorCorrectionLevel());
                     if (barcodeData == null) barcodeData = "#SC$SCAN_ABORT$SC#"; // Signal scan is finished, but with no data.
                  }
                 //Barcode results finished
                  if (QtApplication.m_delegateObject != null && QtApplication.onActivityResult != null) {
                      QtApplication.invokeDelegateMethod(QtApplication.onActivityResult, requestCode, resultCode, data);
                      return;
                  }
                  if (requestCode == MINISTRO_INSTALL_REQUEST_CODE)
                      startApp(false);
                  super.onActivityResult(requestCode, resultCode, data);
              }
              

              </code>

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved