int ScreenValues::retrieveDpi() { #ifdef Q_OS_ANDROID QAndroidJniEnvironment env; env->PushLocalFrame(9); QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); QAndroidJniObject resources = activity.callObjectMethod("getResources", "()Landroid/content/res/Resources;"); QAndroidJniObject displayMetrics = resources.callObjectMethod("getDisplayMetrics", "()Landroid/util/DisplayMetrics;"); jint densityDpi = displayMetrics.getField<jint>("densityDpi"); int result = (int)densityDpi; return result; #else return QGuiApplication::primaryScreen()->physicalDotsPerInch(); #endif }
bool ScreenValues::retrieveIsTablet() { #ifdef Q_OS_ANDROID QAndroidJniEnvironment env; env->PushLocalFrame(9); QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); QAndroidJniObject resources = activity.callObjectMethod("getResources", "()Landroid/content/res/Resources;"); QAndroidJniObject configuration = resources.callObjectMethod("getConfiguration", "()Landroid/content/res/Configuration;"); jint smallestScreenWidthDp = configuration.getField<jint>("smallestScreenWidthDp"); return smallestScreenWidthDp >= 600; #else return false; #endif }
float ScreenValues::retrieveDensity() { #ifdef Q_OS_ANDROID QAndroidJniEnvironment env; env->PushLocalFrame(9); QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); jclass activityClass = env->GetObjectClass(activity.object<jobject>()); jmethodID mIDGetResources = env->GetMethodID(activityClass, "getResources", "()Landroid/content/res/Resources;"); jobject resources = env->CallObjectMethod(activity.object<jobject>(), mIDGetResources); jclass resourcesClass = env->GetObjectClass(resources); jmethodID mIDGetDisplayMetrics = env->GetMethodID(resourcesClass, "getDisplayMetrics", "()Landroid/util/DisplayMetrics;"); jobject displayMetrics = env->CallObjectMethod(resources, mIDGetDisplayMetrics); jclass displayMetricsClass = env->GetObjectClass(displayMetrics); jfieldID fIDDensityDpi = env->GetFieldID(displayMetricsClass, "density", "F"); jfloat densityDpi = env->GetFloatField(displayMetrics, fIDDensityDpi); float result = (float)densityDpi; env->PopLocalFrame(NULL); return result; #else return QGuiApplication::primaryScreen()->physicalDotsPerInch(); #endif }