【发布时间】:2018-06-29 16:39:12
【问题描述】:
如何在 Android 中从 C++ 访问 PackageManager 和相关方法(如 hasSystemFeature)?
【问题讨论】:
标签: android c++ c android-ndk java-native-interface
如何在 Android 中从 C++ 访问 PackageManager 和相关方法(如 hasSystemFeature)?
【问题讨论】:
标签: android c++ c android-ndk java-native-interface
我最近需要这样做,并拼凑了许多其他答案以使其正常工作。在这里分享,以防对他人有所帮助。
要使用,请传入您要检查的应用程序上下文和功能字符串。这应该很容易扩展到其他 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;
}
【讨论】: