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. IMEI on android(with JNA)

IMEI on android(with JNA)

Scheduled Pinned Locked Moved Mobile and Embedded
8 Posts 3 Posters 3.6k Views
  • 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.
  • S Offline
    S Offline
    sufferin_ollegator
    wrote on last edited by sufferin_ollegator
    #1

    Good day. I apologize for my English. I use Google Translate. I have the code. This code works without error in 2014. At the moment, I get an error >> JNI DETECTED ERROR IN APPLICATION: GetStringUTFLength received NULL jstring in call to GetStringITFLength

    please help me edit the code and remove the error (to bring it into working condition)

        QAndroidJniEnvironment env;
        jclass contextClass = env->FindClass("android/content/Context");
        jfieldID fieldId = env->GetStaticFieldID(contextClass, "TELEPHONY_SERVICE", "Ljava/lang/String;");
        jstring telephonyManagerType = (jstring) env->GetStaticObjectField(contextClass, fieldId);
    
        jclass telephonyManagerClass = env->FindClass("android/telephony/TelephonyManager");
        jmethodID methodId = env->GetMethodID(contextClass, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
    
       QAndroidJniObject qtActivityObj = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative",  "activity", "()Landroid/app/Activity;");
        jobject telephonyManager = env->CallObjectMethod(qtActivityObj.object<jobject>(), methodId, telephonyManagerType);
    
        methodId = env->GetMethodID(telephonyManagerClass, "getDeviceId", "()Ljava/lang/String;");
        jstring jstr = (jstring) env->CallObjectMethod(telephonyManager, methodId);
    
        jsize len = env->GetStringUTFLength(jstr);
        char* buf_devid = new char[32];
        env->GetStringUTFRegion(jstr, 0, len, buf_devid);
        QString imei(buf_devid);
        delete buf_devid;
        return imei;
    
    jsulmJ 1 Reply Last reply
    0
    • S sufferin_ollegator

      Good day. I apologize for my English. I use Google Translate. I have the code. This code works without error in 2014. At the moment, I get an error >> JNI DETECTED ERROR IN APPLICATION: GetStringUTFLength received NULL jstring in call to GetStringITFLength

      please help me edit the code and remove the error (to bring it into working condition)

          QAndroidJniEnvironment env;
          jclass contextClass = env->FindClass("android/content/Context");
          jfieldID fieldId = env->GetStaticFieldID(contextClass, "TELEPHONY_SERVICE", "Ljava/lang/String;");
          jstring telephonyManagerType = (jstring) env->GetStaticObjectField(contextClass, fieldId);
      
          jclass telephonyManagerClass = env->FindClass("android/telephony/TelephonyManager");
          jmethodID methodId = env->GetMethodID(contextClass, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
      
         QAndroidJniObject qtActivityObj = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative",  "activity", "()Landroid/app/Activity;");
          jobject telephonyManager = env->CallObjectMethod(qtActivityObj.object<jobject>(), methodId, telephonyManagerType);
      
          methodId = env->GetMethodID(telephonyManagerClass, "getDeviceId", "()Ljava/lang/String;");
          jstring jstr = (jstring) env->CallObjectMethod(telephonyManager, methodId);
      
          jsize len = env->GetStringUTFLength(jstr);
          char* buf_devid = new char[32];
          env->GetStringUTFRegion(jstr, 0, len, buf_devid);
          QString imei(buf_devid);
          delete buf_devid;
          return imei;
      
      jsulmJ Online
      jsulmJ Online
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @sufferin_ollegator It looks like jstr is NULL when you call

      jsize len = env->GetStringUTFLength(jstr);
      

      You need to check why

      jstring jstr = (jstring) env->CallObjectMethod(telephonyManager, methodId);
      

      returns NULL.
      In general you do not have any checks for anything in your code! You should check the values you get and print error messages if something is not valid. For example:

      jclass contextClass = env->FindClass("android/content/Context");
      

      you do not check whether contextClass is valid. What if the class was not found?

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      S 1 Reply Last reply
      1
      • jsulmJ jsulm

        @sufferin_ollegator It looks like jstr is NULL when you call

        jsize len = env->GetStringUTFLength(jstr);
        

        You need to check why

        jstring jstr = (jstring) env->CallObjectMethod(telephonyManager, methodId);
        

        returns NULL.
        In general you do not have any checks for anything in your code! You should check the values you get and print error messages if something is not valid. For example:

        jclass contextClass = env->FindClass("android/content/Context");
        

        you do not check whether contextClass is valid. What if the class was not found?

        S Offline
        S Offline
        sufferin_ollegator
        wrote on last edited by
        #3

        @jsulm i try this check.

            QAndroidJniEnvironment env;
            jclass contextClass = env->FindClass("android/content/Context");
            if(contextClass){
                qDebug() << "OLLEG: 1 found";
            }
            else{
                qDebug() << "OLLEG: 1 NOT found";
            }
        
            jfieldID fieldId = env->GetStaticFieldID(contextClass, "TELEPHONY_SERVICE", "Ljava/lang/String;");
            if(fieldId){
                qDebug() << "OLLEG: 2 found";
            }
            else{
                qDebug() << "OLLEG: 2 NOT found";
            }
        
        
            jstring telephonyManagerType = (jstring) env->GetStaticObjectField(contextClass, fieldId);
            if(telephonyManagerType){
                qDebug() << "OLLEG: 3 found";
            }
            else{
                qDebug() << "OLLEG: 3 NOT found";
            }
        
            jclass telephonyManagerClass = env->FindClass("android/telephony/TelephonyManager");
            if(telephonyManagerClass){
                qDebug() << "OLLEG: 4 found";
            }
            else{
                qDebug() << "OLLEG: 4 NOT found";
            }
        
        
            jmethodID methodId = env->GetMethodID(contextClass, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
            if(methodId){
                qDebug() << "OLLEG: 5 found";
            }
            else{
                qDebug() << "OLLEG: 5 NOT found";
            }
        
            QAndroidJniObject qtActivityObj = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative",  "activity", "()Landroid/app/Activity;");
        
            jobject telephonyManager = env->CallObjectMethod(qtActivityObj.object<jobject>(), methodId, telephonyManagerType);
            if(telephonyManager){
                qDebug() << "OLLEG: 6 found";
            }
            else{
                qDebug() << "OLLEG: 6 NOT found";
            }
        
            methodId = env->GetMethodID(telephonyManagerClass, "getDeviceId", "()Ljava/lang/String;");
            if(methodId){
                qDebug() << "OLLEG: 7 found";
            }
            else{
                qDebug() << "OLLEG: 7 NOT found";
            }
        
            jstring jstr = (jstring) env->CallObjectMethod(telephonyManager, methodId);
            if(jstr){
                qDebug() << "OLLEG: 8 found";
            }
            else{
                qDebug() << "OLLEG: 8 NOT found";
            }
        
            jsize len = env->GetStringUTFLength(jstr);
            char* buf_devid = new char[32];
            env->GetStringUTFRegion(jstr, 0, len, buf_devid);
            QString imei(buf_devid);
            delete buf_devid;
            return imei;
        
            **CONSOLE:** 
        

        OLLEG: 1 found
        OLLEG: 2 found
        OLLEG: 3 found
        OLLEG: 4 found
        OLLEG: 5 found
        OLLEG: 6 found
        OLLEG: 7 found
        OLLEG: 8 NOT found

        JNI DETECTED ERROR IN APPLICATION: GetStringUTFLength received NULL jstring in call to GetStringUTFLength

        D 1 Reply Last reply
        0
        • S sufferin_ollegator

          @jsulm i try this check.

              QAndroidJniEnvironment env;
              jclass contextClass = env->FindClass("android/content/Context");
              if(contextClass){
                  qDebug() << "OLLEG: 1 found";
              }
              else{
                  qDebug() << "OLLEG: 1 NOT found";
              }
          
              jfieldID fieldId = env->GetStaticFieldID(contextClass, "TELEPHONY_SERVICE", "Ljava/lang/String;");
              if(fieldId){
                  qDebug() << "OLLEG: 2 found";
              }
              else{
                  qDebug() << "OLLEG: 2 NOT found";
              }
          
          
              jstring telephonyManagerType = (jstring) env->GetStaticObjectField(contextClass, fieldId);
              if(telephonyManagerType){
                  qDebug() << "OLLEG: 3 found";
              }
              else{
                  qDebug() << "OLLEG: 3 NOT found";
              }
          
              jclass telephonyManagerClass = env->FindClass("android/telephony/TelephonyManager");
              if(telephonyManagerClass){
                  qDebug() << "OLLEG: 4 found";
              }
              else{
                  qDebug() << "OLLEG: 4 NOT found";
              }
          
          
              jmethodID methodId = env->GetMethodID(contextClass, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
              if(methodId){
                  qDebug() << "OLLEG: 5 found";
              }
              else{
                  qDebug() << "OLLEG: 5 NOT found";
              }
          
              QAndroidJniObject qtActivityObj = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative",  "activity", "()Landroid/app/Activity;");
          
              jobject telephonyManager = env->CallObjectMethod(qtActivityObj.object<jobject>(), methodId, telephonyManagerType);
              if(telephonyManager){
                  qDebug() << "OLLEG: 6 found";
              }
              else{
                  qDebug() << "OLLEG: 6 NOT found";
              }
          
              methodId = env->GetMethodID(telephonyManagerClass, "getDeviceId", "()Ljava/lang/String;");
              if(methodId){
                  qDebug() << "OLLEG: 7 found";
              }
              else{
                  qDebug() << "OLLEG: 7 NOT found";
              }
          
              jstring jstr = (jstring) env->CallObjectMethod(telephonyManager, methodId);
              if(jstr){
                  qDebug() << "OLLEG: 8 found";
              }
              else{
                  qDebug() << "OLLEG: 8 NOT found";
              }
          
              jsize len = env->GetStringUTFLength(jstr);
              char* buf_devid = new char[32];
              env->GetStringUTFRegion(jstr, 0, len, buf_devid);
              QString imei(buf_devid);
              delete buf_devid;
              return imei;
          
              **CONSOLE:** 
          

          OLLEG: 1 found
          OLLEG: 2 found
          OLLEG: 3 found
          OLLEG: 4 found
          OLLEG: 5 found
          OLLEG: 6 found
          OLLEG: 7 found
          OLLEG: 8 NOT found

          JNI DETECTED ERROR IN APPLICATION: GetStringUTFLength received NULL jstring in call to GetStringUTFLength

          D Offline
          D Offline
          Devopia53
          wrote on last edited by
          #4

          @sufferin_ollegator

          I'm not tested your code. But i have two questions.

          1. Is the device(like cell phone) subscribed to the carrier?
          2. Is permission(android.permission.READ_PHONE_STATE) added?

          If either is not, getDeviceId return null.

          S 1 Reply Last reply
          0
          • D Devopia53

            @sufferin_ollegator

            I'm not tested your code. But i have two questions.

            1. Is the device(like cell phone) subscribed to the carrier?
            2. Is permission(android.permission.READ_PHONE_STATE) added?

            If either is not, getDeviceId return null.

            S Offline
            S Offline
            sufferin_ollegator
            wrote on last edited by
            #5

            @Devopia53

            1. device -> asus nexus 7 (2012)
            2. yes, permission added

            please someone who can. test this code snippet.

            D 1 Reply Last reply
            0
            • S sufferin_ollegator

              @Devopia53

              1. device -> asus nexus 7 (2012)
              2. yes, permission added

              please someone who can. test this code snippet.

              D Offline
              D Offline
              Devopia53
              wrote on last edited by Devopia53
              #6

              @sufferin_ollegator

              Your code worked well, but not GetStringUTFLength().
              You should do QString imei = QAndroidJniObject::fromLocalRef(jstr).toString() instead.
              I guess, your phone is not subscribed.
              So that phone does not have an IMEI code.
              The getDeviceId() is always null.

              S 2 Replies Last reply
              0
              • D Devopia53

                @sufferin_ollegator

                Your code worked well, but not GetStringUTFLength().
                You should do QString imei = QAndroidJniObject::fromLocalRef(jstr).toString() instead.
                I guess, your phone is not subscribed.
                So that phone does not have an IMEI code.
                The getDeviceId() is always null.

                S Offline
                S Offline
                sufferin_ollegator
                wrote on last edited by
                #7

                @Devopia53 one of these days I'll try this code on another device. Thank you for the answer!

                1 Reply Last reply
                0
                • D Devopia53

                  @sufferin_ollegator

                  Your code worked well, but not GetStringUTFLength().
                  You should do QString imei = QAndroidJniObject::fromLocalRef(jstr).toString() instead.
                  I guess, your phone is not subscribed.
                  So that phone does not have an IMEI code.
                  The getDeviceId() is always null.

                  S Offline
                  S Offline
                  sufferin_ollegator
                  wrote on last edited by
                  #8

                  @Devopia53 you rights. this code work only with GSM module.

                  How to change this code to find ou the MAC ?

                  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