Мне нужно было сделать это недавно и собрать несколько других ответов, чтобы это заработало. Поделитесь этим здесь, если это поможет другим.
Чтобы использовать, передайте контекст приложения и строку функции, которую вы хотите проверить. Это должно быть легко расширяемо для других методов 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;
}