Qt Android get phone number
-
Hi,
In my mobile app I want get phone number. So I added uses permisions:<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_NUMBERS"/>
And I created class PhoneInfo:
package JavaApi; import android.content.Context; import android.telephony.TelephonyManager; public class PhoneInfo { public String getHelloJava() { return "Hello java"; } public String getPhoneNumber(){ TelephonyManager tMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String mPhoneNumber = tMgr.getLine1Number(); return mPhoneNumber; } }
I try use class by my c++ code:
if(QAndroidJniObject::isClassAvailable("JavaApi/PhoneInfo")) { QAndroidJniObject someJavaObject = QAndroidJniObject("JavaApi/PhoneInfo"); qDebug() << someJavaObject.callObjectMethod<jstring>("getHelloJava").toString(); qDebug() << someJavaObject.callObjectMethod<jstring>("getPhoneNumber").toString(); }
I tested earlier class "getHelloJava" and it works fine. Now I want use class "getPhone number" but unfortunately I got compile error java file:
:-1: error: /media/sf_GitLab/app/build/android-build/src/PhoneInfo.java:12: error: cannot find symbol :-1: error: TelephonyManager tMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); ^ symbol: method getSystemService(String) location: class PhoneInfo 1 error FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileDebugJavaWithJavac'. > Compilation failed; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 1s :-1: error: Building the android package failed! -- For more information, run this command with --verbose.
How could I fix it? I dont programing java everyday.
-
@Creatorczyk said in Qt Android get phone number:
return PhoneNumber;
There is no such variable in that class.
I guess you mean mPhoneNumber? -
@Creatorczyk But error message is still the same: cannot find symbol
return PhoneNumber;Maybe you need to completely rebuild?
-
@Creatorczyk
I'm by no means an expert in Java, but when I try to access/callgetSystemService()
I do that on an activity instance. Since your PhoneInfo class does not extend QtActivity try it withQtNative.activity().getSystemService(...);
-
@Creatorczyk said in Qt Android get phone number:
TelephonyManager tMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
This cannot work!
getSystemService()
is a member ofandroid.content.Context
You could try this:
Package JavaApi; import android.content.Context; import android.telephony.TelephonyManager; public class PhoneInfo { public String getHelloJava() { return "Hello java"; } public String getPhoneNumber(Context context){ TelephonyManager tMgr = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); String mPhoneNumber = tMgr.getLine1Number(); return mPhoneNumber; } }
And, on C++ side:
if(QAndroidJniObject::isClassAvailable("JavaApi/PhoneInfo")) { QAndroidJniObject someJavaObject = QAndroidJniObject("JavaApi/PhoneInfo"); qDebug() << someJavaObject.callObjectMethod<jstring>("getHelloJava").toString(); qDebug() << someJavaObject.callObjectMethod<jstring>( "getPhoneNumber", "(Landroid/content/Context;)Ljava/lang/String;", QtAndroid::androidContext() ).toString(); }
-
@KroMignon I got error like bellow when I tried your code:
/media/sf_GitLab/app/app/main.cpp:41: error: no matching member function for call to 'callObjectMethod' ../app/main.cpp:41:36: error: no matching member function for call to 'callObjectMethod' qDebug() << someJavaObject.callObjectMethod<jstring>( ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ /home/john/Qt/5.15.2/android/include/QtAndroidExtras/qandroidjniobject.h:74:23: note: candidate function template not viable: requires single argument 'methodName', but 3 arguments were provided QAndroidJniObject callObjectMethod(const char *methodName) const;
^
-
@Creatorczyk said in Qt Android get phone number:
I got error like bellow when I tried your code:
Sorry my mistake, should be:
if(QAndroidJniObject::isClassAvailable("JavaApi/PhoneInfo")) { QAndroidJniObject javaString; QAndroidJniObject someJavaObject = QAndroidJniObject("JavaApi/PhoneInfo"); javaString = someJavaObject.callObjectMethod("getHelloJava", "()Ljava/lang/String;"); qDebug() << "getHelloJava() returns: " << (javaString .isValid() ? javaString.toString() : "***ERROR***"); javaString = someJavaObject.callObjectMethod( "getPhoneNumber", "(Landroid/content/Context;)Ljava/lang/String;", QtAndroid::androidContext() ); qDebug() << "getPhoneNumber() returns:" << (javaString .isValid() ? javaString.toString() : "***ERROR***"); }
-
@KroMignon I received error like below:
-
@Creatorczyk Hmm maybe I should take more time before posting!
Should be:
javaString = someJavaObject.callObjectMethod( "getPhoneNumber", "(Landroid/content/Context;)Ljava/lang/String;", QtAndroid::androidContext().object<jobject>() );