Как вызвать PackageManager.hasSystemFeature из нативного Android C ++ с использованием JNI? - PullRequest
0 голосов
/ 29 июня 2018

Как получить доступ к PackageManager и связанным с ним методам (например, hasSystemFeature) из C ++ в Android?

1 Ответ

0 голосов
/ 29 июня 2018

Мне нужно было сделать это недавно и собрать несколько других ответов, чтобы это заработало. Поделитесь этим здесь, если это поможет другим.

Чтобы использовать, передайте контекст приложения и строку функции, которую вы хотите проверить. Это должно быть легко расширяемо для других методов PackageManager.

extern "C" JNIEXPORT jboolean JNICALL Java_com_your_cool_application_MainActivity_native_1hasSystemFeature(
        JNIEnv *env, jobject calling_object, jobject main_activity, jstring feature_string) {
    jclass activity_class = env->GetObjectClass(main_activity);

    //context.getPackageManager()
    jmethodID method_id_pm = env->GetMethodID(activity_class, "getPackageManager", "()Landroid/content/pm/PackageManager;");
    jobject package_manager  = env->CallObjectMethod(main_activity, method_id_pm);
    jclass pm_class = env->GetObjectClass(package_manager);

    //PackageManager.hasSystemFeature()
    jmethodID method_id_feature = env->GetMethodID(pm_class,"hasSystemFeature", "(Ljava/lang/String;)Z");
    jboolean has_feature = env->CallBooleanMethod(package_manager, method_id_feature, feature_string);

    return has_feature;
}
...